在Python中如何将字符串传递给可执行文件stdin?

问题描述:

在Windows上,我有一个从stdin读取的程序(prog.exe)。在Python中,我想将一个字符串作为输入传递给它的stdin。怎么做?在Python中如何将字符串传递给可执行文件stdin?

喜欢的东西:

subprocess.check_output("echo {0} | myprog.exe".format(mystring)) 

或(使ARGS列表)

subprocess.check_output("echo {0} | myprog.exe".format(mystring).split()) 

似乎并没有工作。它给了我:

WindowsError: [Error 2] The system cannot find the file specified 

我还试图用用StringIO的“标准输入”关键字ARG(这是一个类似文件的对象)

subprocess.check_output(["myprog.exe"], stdin=StringIO(mystring)) 

仍然没有运气 - check_output不工作StringIO的。

+0

注意,答案由'wim'肯定是去这里,但是,如果你使用'壳= TRUE;在'check_output'打电话给你的尝试可能会工作方式。 – mgilson 2012-07-20 01:21:30

您应该使用Popen communicate方法(docs)。

proc = subprocess.Popen(["myprog.exe"], stdin=subprocess.PIPE) 
stdout, stderr = proc.communicate('my input')