我嘗試安裝過程中setup.py調用一個Python腳本,使用自定義安裝:爲什麼從setup.py調用Python腳本調用Python shell?
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))
當Ubuntu的機器,工藝上部署,而不是執行deploy_database.py包,說明不了什麼。當我用Ctrl + C手動停止,輸出似乎表明,而不是實際運行deploy_database.py,它只是簡單的Python:
^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
有什麼錯我叫Python腳本的方式嗎?我應該怎麼做呢?
或者你可以使用'execfile'。 –
'shell = True' *應該*暗示您*需要*一個*不能被表達爲一個簡單的字符串序列的特性,即當使用'shell = True'時,您必須使用一個表示整個字符串的字符串* shell命令*(不*僅僅調用外部程序,但包含一些shell特性,如管道/重定向/調用內置等)。否則,你應該使用'shell = False',你可以用'sys.argv'的相同格式來表示要執行的程序和它的參數。混合這兩種方法會導致這種奇怪的結果。 – Bakuriu