Python 子进程返回异常

Python subprocess returning exception

我有以下代码直到最近才有效:

        si = STARTUPINFO()
        si.dwFlags |= STARTF_USESHOWWINDOW
        env = environ
        self.popen = Popen('python', [path + '\opt_module_v3.py'] + vlist, stdout=PIPE, stderr=STDOUT, stdin=PIPE, universal_newlines=True, bufsize=1, startupinfo=si, env=env)
        lines_iterator = iter(self.popen.stdout.readline, b"")

它调用 opt_module_v3.py 和 returns 消息作为子进程 运行。 当我 运行 主代码时,出现以下异常:

   self.popen = Popen('python', [path + '\opt_module_v3.py'] + vlist, stdout=PIPE, 
stderr=STDOUT, stdin=PIPE, universal_newlines=True, bufsize=1, startupinfo=si, env=env)
File "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", 
line 108, in __init__
super(SubprocessPopen, self).__init__(*args, **kwargs)
TypeError: __init__() got multiple values for argument 'bufsize'

就像我提到的那样,这段代码以前是有效的,但我可能已经塞满了,因为我一直在努力改进。 关于这里可能发生的事情的任何线索?

文档说 API 是:

subprocess.Popen(args, bufsize=- 1, MORE_ARGS...)

这意味着您的命令必须放在列表中。

在您的代码中 [path + '\opt_module_v3.py'] + vlist 被解释为 bufsize

而不是

self.popen = Popen('python', [path + '\opt_module_v3.py'] + vlist, stdout=PIPE, stderr=STDOUT, stdin=PIPE, universal_newlines=True, bufsize=1, startupinfo=si, env=env)

你应该使用像

这样的东西

self.popen = Popen(['python', [path + '\opt_module_v3.py'] + vlist], stdout=PIPE, stderr=STDOUT, stdin=PIPE, universal_newlines=True, bufsize=1, startupinfo=si, env=env)

不过我认为您可能还需要将您的路径连接到一个字符串才能使这项工作正常进行