嗨,我对如何使用popen运行多个命令感到茫然, 我试图自动执行通常在Windows命令行上运行的一系列步骤。基本步骤通常从Windows cmd行运行
所有这些命令必须一个接一个地在同一命令行窗口中运行,而不是单独的进程或单独的命令行窗口。而不是打开cmd窗口并输入命令我想使用python的subprocess.popen命令
到目前为止,我有:
args=[]
args.append(r'C:\Program Files (x86)\appsettings\setmyvars.cmd')
args.append(r'start db on db_path="my_url"')
args.append(r'get_data_from_db>c:\temp\output.txt')
args.append(r'stop db on db_path="my_url"')
p=Popen(args,stdout=PIPE,sterr=PIPE,shell=True)
stdout,stderr=p.communicate()
if stderr:
print "you have an error", stderr
else:
print "well done you have data", stdout
这不太正常我可以看到第一行是运行的,即执行了setmyvars.cmd,但没有别的,其他参数都没有被调用,如果他们这样做,我会在输出中看到结果。 txt文件。
如何使用popen一个接一个地运行一系列命令。为什么只有第一个命令似乎被执行而没有其他命令
我在Windows上使用python2.7
的问候。
答案 0 :(得分:0)
你有几个问题正在发生。你仍然需要告诉popen()运行哪个程序。仅使用shell=True
并不排除提供cmd.exe
作为运行程序的需要。如果您真的想通过一次cmd.exe调用来运行所有这些命令,那么您需要将它们与&&
串在一起。
from subprocess import *
args=[]
args.append(r'C:\Windows\System32\cmd.exe')
args.append(r'/C')
args.append(r'(echo 1 && echo 2 && echo 4)')
p = Popen(args,stdout=PIPE,stderr=PIPE,shell=True)
stdout,stderr=p.communicate()
if stderr:
print "you have an error", stderr
else:
print "well done you have data", stdout
使用%ComSpec%环境变量可能比硬编码cmd.exe的位置更好。您拥有的路径通常是正确的。 : - )