【发布时间】:2017-10-12 08:40:01
【问题描述】:
您好,我不知道如何使用 popen 运行多个命令, 我正在尝试自动化通常在 Windows 命令行上运行的一系列步骤。基本步骤通常是从 Windows cmd 行运行的
- 运行 Windows 命令脚本 (.cmd) 文件以设置环境变量,即 C:\Program Files (x86)\appsettings\setupvariables.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
问候。
【问题讨论】:
-
您可以使用
&连接命令,但为什么不为此创建一个批处理文件呢? -
另外,使用字符串而不是带有
shell=True的参数列表。通常子进程不知道如何为 cmd.exe 构建带有特殊字符转义的命令行。
标签: windows python-2.7 shell cmd subprocess