将Cygwin管道化为Python程序

时间:2009-11-23 19:03:19

标签: python cygwin pipe subprocess

作为我对整个Piping事物和Python的新手我最近遇到了一个问题,试图管道Cygwin的stdin&使用Python的子进程模块将stdout导入python程序。 例如,我采取了一个简单的程序:

cygwin = subprocess.Popen('PathToCygwin',shell=False,stdin=subprocess.PIPE,stdout=subprocess.PIPE)
cygwin.stdin.write('ssh')

之后我收到了这个错误:

cygwin.stdin.write('ssh')
IOError: [Errno 22] Invalid argument

我做错了什么?

1 个答案:

答案 0 :(得分:2)

好吧,你的文字代码不起作用。您传递的值为'PathToCygwin'的字符串,并且不会执行任何操作。我假设你传递的是更好的字符串,但你没有告诉我们什么。

我认为你的PathToCygwin可能就是问题所在。如果你没有正确的路径,它将无法正常工作。

这是我的测试代码。我在Cygwin版本的Python下运行它,所以我使用了Cygwin风格的路径:而不是r"C:\cygwin\bin\bash.exe"我使用了/cygdrive/c路径:

>>> cpath = "/cygdrive/c/cygwin/bin/bash.exe"
>>> cygwin = subprocess.Popen(cpath,shell=False,stdin=subprocess.PIPE,stdout=su
bprocess.PIPE)
>>> cygwin.stdin.write("ssh")
>>>

同样,我在Cygwin编译的Python版本中运行了这个版本。如果您使用的是Windows本机版本的Python,则可能需要使用C:路径。

如果您仍遇到问题,请告诉我们您使用的是哪个版本的Python,并向我们展示您使用的实际路径代码?