我试图使用Python的Popen来改变我的工作目录并执行一个命令。
pg = subprocess.Popen("cd c:/mydirectory ; ./runExecutable.exe --help", stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
buff,buffErr = pg.communicate()
然而,powershell返回 "系统无法找到指定的路径"。该路径does exist.
If I run
pg = subprocess.Popen("cd c:/mydirectory ;", stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
它返回同样的东西。
However, if i run this: (without the semicolon)
pg = subprocess.Popen("cd c:/mydirectory",stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
该命令没有错误地返回。这使我相信是分号的问题。这种行为的原因是什么,我怎样才能绕过它?
我知道我可以只做c:/mydirectory/runExecutable.exe --help,但我想知道为什么会发生这种情况。
UPDATE :
我测试了把Powershell的路径作为Popen的executable
参数传递给它。仅仅是powershell.exe
可能是不够的。要找到powershell
的真正绝对路径,请执行where.exe powershell
。然后你可以把它传给Popen。注意,shell
仍然是真的。它将使用默认的shell,但将命令传递给powershell.exe
。
powershell = C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
pg = subprocess.Popen("cd c:/mydirectory ; ./runExecutable.exe", stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True, executable=powershell)
buff,buffErr = pg.communicate()
//It works!