I have the following code that has been working until recently:
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"")
it calls the opt_module_v3.py and returns messages as the child process runs. When I run the main code, I’m getting the following exception:
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:ProgramDataAnaconda3libsite-packagesspyder_kernelscustomizespydercustomize.py",
line 108, in __init__
super(SubprocessPopen, self).__init__(*args, **kwargs)
TypeError: __init__() got multiple values for argument 'bufsize'
Like I mentioned, this code was working before but I might have stuffed up since I’ve been working on improvements. Any clues on what could be happening here?
Advertisement
Answer
The documentation says the API is:
subprocess.Popen(args, bufsize=- 1, MORE_ARGS )
This means your command has to be put in a list.
in your code [path + 'opt_module_v3.py'] + vlist
is interpreted as bufsize
instead of
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)
you should use something like
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)
I think however you may additionaly need to concatenate your path to a string to make this work