나는 사용자 정의 설치를 사용하여 설치하는 동안 setup.py에서 파이썬 스크립트를 호출하려고 :왜 setup.py에서 파이썬 스크립트를 호출하면 파이썬 쉘이 호출됩니까?
class CustomInstall(install):
def run(self):
install.run(self)
...
p = subprocess.Popen(
[sys.executable, 'demo_package/deploy_database.py'],
shell=True,
stdout=subprocess.PIPE,
cwd=os.path.join(self.install_lib, 'demo_package'))
out, err = p.communicate()
setup(..., cmdclass=dict(install=CustomInstall))
대신 deploy_database.py을 실행, 우분투 기계, 과정에 패키지를 배포, 아무것도 표시되지 않습니다.
^CDownloading/unpacking PypiPackagesMonitoring
Downloading demo-1.0.64.zip
Running setup.py egg_info for package demo
Installing collected packages: demo
Running setup.py install for demo
Python 3.3.2+ (default, Oct 9 2013, 14:50:09)
[GCC 4.8.1 on linux
Type "help", "copyright", "credits" or "license" for more information.
Cleaning up...
Operation cancelled by the user
Storing complete log in /home/.../.pip/pip.log
내가 파이썬 스크립트를 호출하는 방식에 어떤 문제가 : 나는 Ctrl + C로 수동으로 중지 할 때, 출력이 그를 나타내는 것 대신에 실제로 deploy_database.py를 실행, 단순히 파이썬 시작? 대신 어떻게해야합니까?
아니면 아마도'execfile'을 사용할 수 있습니다. –
'shell = True' * 단순한 문자열 시퀀스로 표현할 수없는 기능이 필요하다는 것을 의미해야합니다. 즉,'shell = True'를 사용할 때 전체를 나타내는 단일 문자열을 사용해야합니다 * 쉘 명령 * (외부 프로그램을 호출하는 것이 아니라 파이프/리다이렉션/내장 함수 호출과 같은 일부 쉘 기능 포함). 그렇지 않으면'shell = False'를 사용해야하고'sys.argv '와 같은 형식으로 실행할 프로그램과 그 인수를 나타낼 수 있습니다. 두 가지 방법을 혼합하면이 이상한 결과가 발생합니다. – Bakuriu