作为我对整个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
我做错了什么?
答案 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,并向我们展示您使用的实际路径代码?