Jes*_*dge 9 python windows git subprocess path
import subprocess
proc = subprocess.Popen('git status')
print 'result: ', proc.communicate()
Run Code Online (Sandbox Code Playgroud)
我在我的系统路径中有git,但是当我像这样运行子进程时,我得到:
WindowsError: [Error 2] The system cannot find the file specified
如何让子进程在系统路径中找到git?
Windows XP上的Python 2.6.
你在这里看到的问题是,由引擎下的子进程使用的Windows API函数CreateProcess不会自动解析其他可执行扩展.exe.在Windows上,'git'命令确实安装为git.cmd.因此,您应该修改示例以显式调用git.cmd:
import subprocess
proc = subprocess.Popen('git.cmd status')
print 'result: ', proc.communicate()
Run Code Online (Sandbox Code Playgroud)
这个原因git适用shell==True于Windows shell自动解析git的时候git.cmd.
import subprocess
import os.path
def resolve_path(executable):
if os.path.sep in executable:
raise ValueError("Invalid filename: %s" % executable)
path = os.environ.get("PATH", "").split(os.pathsep)
# PATHEXT tells us which extensions an executable may have
path_exts = os.environ.get("PATHEXT", ".exe;.bat;.cmd").split(";")
has_ext = os.path.splitext(executable)[1] in path_exts
if not has_ext:
exts = path_exts
else:
# Don't try to append any extensions
exts = [""]
for d in path:
try:
for ext in exts:
exepath = os.path.join(d, executable + ext)
if os.access(exepath, os.X_OK):
return exepath
except OSError:
pass
return None
git = resolve_path("git")
proc = subprocess.Popen('{0} status'.format(git))
print 'result: ', proc.communicate()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6075 次 |
| 最近记录: |