вывод подпроцессного конвейера в Windows - PullRequest
1 голос
/ 14 декабря 2011

У меня есть этот кусок кода, который отлично работает в Linux, но не работает в Windows.Процесс создан нормально, но я получаю ошибку, и ничего не читается из канала:

    p = subprocess.Popen(['python', '-u', self.file_to_run,
                                   '-s', '-g', '-i', self.input_file],
                                   universal_newlines=True,
                                   stdout=subprocess.PIPE)
    ...
    out = p.stdout.readline().rstrip()

Ошибка, которую я получаю:

Traceback (most recent call last):
  File "bench.py", line 59, in <module>
    multi.add_process()
  File "bench.py", line 47, in add_process
    stdout=subprocess.PIPE)
  File "c:\python\v2.5.1-ast3\...\lib\subprocess.py", line 615, in __init__
    self.stdout = os.fdopen(c2pread, 'rU', bufsize)
OSError: [Errno 22] Invalid argument

Я фактически создаю несколько таких процессов и на основе их выводарассчитать некоторые значения, но это не имеет значения.Что мне нужно сделать, так это запустить скрипт с определенными аргументами несколько раз и проанализировать данные, передаваемые из стандартного вывода каждого процесса.

1 Ответ

0 голосов
/ 14 декабря 2011

попробуйте использовать sys.executable вместо 'python' в аргументах вашего подпроцесса. Я думаю, это потому, что Python отсутствует в PATH в Windows.

Также проверьте значения self.file_to_run и self.input_file, которые должны быть строками, а не None или странными вещами, но это, вероятно, не вызовет OSError.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...