用python调用命令exe

时间:2013-06-25 15:36:28

标签: python pipe

我试图在传入参数时从Python运行命令exe。我已经看了一些其他的问题,我的问题不同的原因是因为我首先要在传递一些参数的同时调用cmd exe程序,然后我必须等待10秒才能提示我一些用户名,然后一些密码。然后我想把这个输出管道输出到一个文件。

如果之前已经调用过程,那么有没有办法传递更多参数? 如何使cmd exe保持打开状态,因为只要我调用它,该过程就会消失。

谢谢

2 个答案:

答案 0 :(得分:1)

看一下子流程沟通和管道示例。

答案 1 :(得分:1)

这是一个例子(首先我必须创建一个简单的python应用程序,花了一些时间来请求输入(在本例中为6秒),名为wait.py

wait.py

import time

print "Sample Waiting App (waiting 6 seconds)"
time.sleep(6)
name = raw_input("Enter a Name: ")
print "Hello", name

这是启动,等待,传递输入和读取输出的代码:

automator.py

from subprocess import Popen, PIPE, STDOUT

p = Popen(['python', 'wait.py'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
print p.communicate('Jason\n')[0]

这是对正在发生的事情的分解:

  1. subprocess.Popen()创建一个进程(运行python解释器并将wait.py脚本作为参数传递)并分配给p最初我让automator.py睡了10秒钟(给wait.py足够的时间来清除它的计时器),但正如@ J.F.Sebastian指出的那样,睡眠是不需要的。原因是调用'communic()'将阻塞,直到wait.py完成。另外因为wait.py是从stdin读取的,所以你可以在wait.py读取它之前填充stdin将内容。对于从stdin流中读取的任何应用程序都是如此。
  2. 然后通过'Jason\n'将字符串p.communicate('Jason\n')[0]发送到流程并打印输出。请注意stdout显示wait.py打印语句的提示和输出,但不显示输入,这是因为输入时输入不在stdout流中,它是呼应。