【发布时间】:2014-07-04 12:08:37
【问题描述】:
Python 3.3.3 视窗 7
Here is the full stack:
Traceback (most recent call last):
File "Blah\MyScript.py", line 578, in Call
output = process.communicate( input=SPACE_KEY, timeout=600 )
File "C:\Python33\lib\subprocess.py", line 928, in communicate
stdout, stderr = self._communicate(input, endtime, timeout)
File "C:\Python33\lib\subprocess.py", line 1202, in _communicate
self.stdin.write(input)
OSError: [Errno 22] Invalid argument
代码如下所示:
process = subprocess.Popen( arguments,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True,
env=environment )
output = process.communicate( input=SPACE_KEY, timeout=600 )
此代码每天运行数百次而没有问题。但是,如果在同一台机器上运行多个脚本(相同的脚本,但有时来自不同的文件夹),我会收到错误消息。脚本未执行相同的操作(即:当我收到此错误时,另一个脚本未执行子进程)。
subProcess 代码使用许多不同的命令行来引发错误。
那么,有人知道发生了什么吗?解释器是否存在多次执行(在不同进程中)的问题? 通常工作得很好的相同代码,如果解释器运行相同(或非常相似)的脚本,就会出错。但他们通常执行脚本的不同部分。
我不知所措:在 8 核机器上使用单个处理器很烦人。
【问题讨论】:
-
你运行的是什么操作系统?它看起来像窗户,但由于这似乎是环境问题,您应该在问题中包含它。
-
检查没有文件名冲突,即脚本不竞争相同的资源。您是否从同一个 Python 脚本启动多个子进程?你使用
threading模块吗?尝试create a minimal complete code example 说明您的问题 -
是的,这是 Windows 7。没有文件冲突(例如:两个失败的命令是 SUBST 和 REG ADD 不带文件,而另一个正在运行的脚本不这样做)。没有排他锁的资源竞争。每个脚本没有多个子进程。没有线程模块。
-
这似乎不是问题,但还有一条信息:该脚本(导致错误)实际上是从子进程(同步)运行的。而其他人则不是。并且所有脚本都会启动它们自己的子进程(都是同步的)。
-
你还遇到这个问题吗?我在调用多个子进程的脚本中看到了相同的消息。
标签: python windows python-3.x subprocess