将Cygwin输出传递给Python程序

0 投票
1 回答
2263 浏览
提问于 2025-04-15 16:18

作为一个刚接触管道和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,并且把你实际使用的路径代码给我们看看?

撰写回答