Как я могу получить результат выполнения процесса, используя subprocess.call()
?
Передача объекта StringIO.StringIO
в stdout
дает эту ошибку:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/subprocess.py", line 444, in call
return Popen(*popenargs, **kwargs).wait()
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/subprocess.py", line 588, in __init__
errread, errwrite) = self._get_handles(stdin, stdout, stderr)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/subprocess.py", line 945, in _get_handles
c2pwrite = stdout.fileno()
AttributeError: StringIO instance has no attribute 'fileno'
>>>
StringIO
работает как файл в большинстве случаев, но не во всех. В вашем случае это не работает, потому что модульmultiprocessing
в некоторых случаях принимает реальные файлы. Это могло быть исправлено: см. bugs.python.org/issue5313, чтобы узнать о соответствующей ошибке. - person Michael Greene   schedule 04.01.2010communicate()
используетselect.select()
, который принимает только файловые дескрипторы, так что на самом деле это не ошибка. Я был весьма сбит с толку, когда впервые столкнулся с этим, и изучение глубин subprocess.py многому меня научило !. - person Mike   schedule 04.01.2010subprocess.run
делает это проще, чем в Python 3.5. Я добавлю ответ, когда у меня будет возможность. - person Mark Amery   schedule 11.04.2016subprocess.check_output()
; в Python 3.5+ вы также захотите посмотретьsubprocess.run()
. Не должно быть необходимости или желания использовать rawsubprocess.Popen()
, если вы можете этого избежать, хотя некоторые более сложные варианты использования требуют этого (и тогда вам придется самостоятельно выполнить необходимую сантехнику). На странице информации о тегах Stack Overflowsubprocess
есть полезные ресурсы для менее тривиальных случаев. - person tripleee   schedule 05.02.2021