【发布时间】:2015-06-23 07:56:15
【问题描述】:
我正在尝试在 python 中使用 subprocess 模块,但它开始工作有点棘手。这是我的代码
import sys
import os
import subprocess
import shlex
def install_module(dir_path, command):
c = shlex.split(command)
os.chdir(dir_path)
try:
p = subprocess.check_output(c, shell=True)
except subprocess.CalledProcessError as e:
#print('install failed for: ' + dir_path + ' ' + command)
print(e.output)
def main():
install_module('D:\installed_software\python modules\kennethreitz-requests-e95e173'
, 'python setup.py install')
install_module('D:\installed_software\python modules\psycopg2-2.6.1'
, 'python setup.py build')
install_module('D:\installed_software\python modules\psycopg2-2.6.1'
, 'python setup.py install')
install_module('D:\installed_software\python modules\pypyodbc-1.3.3\pypyodbc-1.3.3'
, 'python setup.py install')
if __name__ == "__main__":
sys.exit(main())
和我的输出:
install failed for: D:\installed_software\python modules\psycopg2-2.6.1 python setup.py build
b'running build\r\nrunning build_py\r\nrunning build_ext\r\n'
install failed for: D:\installed_software\python modules\psycopg2-2.6.1 python setup.py install
b'running install\r\nrunning build\r\nrunning build_py\r\nrunning build_ext\r\n'
但是当我尝试通过 cmd 正常运行此命令时,我得到以下输出
D:\installed_software\python modules\psycopg2-2.6.1>python setup.py build
running build
running build_py
running build_ext
Error: pg_config executable not found.
Please add the directory containing pg_config to the PATH
or specify the full executable path with the option:
python setup.py build_ext --pg-config /path/to/pg_config build ...
or with the pg_config option in 'setup.cfg'.
为什么它们不同。我已经玩过这个模块了,很难让它重新输入输入并从当前的 shell 读取输出。任何帮助将不胜感激
更新:
所以下面的代码可以正常工作!谢谢J.F!但我仍然遇到问题
sys.sterr.flush()
注释了 sys.sterr.flush() 行的代码
import sys
import os
from subprocess import CalledProcessError, STDOUT, check_output
import shlex
import sys
import os
from subprocess import CalledProcessError, STDOUT, check_output
import shlex
def run_in_path(command, dir_path):
#c = shlex.split(command)
#os.chdir(dir_path)
try:
p = check_output(command, cwd=dir_path, stderr=STDOUT)
except CalledProcessError as e:
sys.stderr.write(e.output.decode("utf-8"))
#sys.sterr.flush()
return e.returncode
else:
return 0
def main():
run_in_path('python setup.py build',
'D:\installed_software\python modules\kennethreitz-requests-e95e173')
run_in_path('python setup.py build',
'D:\installed_software\python modules\psycopg2-2.6.1')
run_in_path('python setup.py install',
'D:\installed_software\python modules\psycopg2-2.6.1')
run_in_path('python setup.py install',
'D:\installed_software\python modules\pypyodbc-1.3.3\pypyodbc-1.3.3')
if __name__ == "__main__":
sys.exit(main())
我在运行 sys.sterr.flush() 时遇到的错误是
sys.sterr.flush()
AttributeError: 'module' object has no attribute 'sterr'
【问题讨论】:
-
不相关:不要使用
python setup.py install,而是更喜欢pip install -r requirements.txt:它可以启用正确卸载,并且可以加快重新安装(由于车轮支持)。 -
是的,我使用 setup install 的唯一原因是因为我所在的服务器无法访问 Internet。所以我必须在本地拥有所有安装文件
-
你可以在没有互联网的情况下使用
pip -
嘿 J.F 是的,我正在运行 python 3.3,所以默认情况下它没有安装 pip。此外,当我尝试使用 python get-pip.py 下载 pip 时,我无法访问互联网,因此无法下载。在互联网上阅读,我可以安装 pip 的 .wheel,但不支持或不推荐。现在我很高兴使用 python 完成安装,但是如果这个项目的大小开始急剧增加,感谢您的反馈会记住它
-
AttributeError 是由于拼写错误:比较
sys.stderr与sys.sterr
标签: python-3.x subprocess