将Cygwin输出传递给Python程序
作为一个刚接触管道和Python的新手,我最近遇到了一个问题,想把Cygwin的标准输入和标准输出通过Python的subprocess模块传递给一个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 个回答
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,并且把你实际使用的路径代码给我们看看?