Как исправить ошибку «объект bool не повторяется» при запуске команды UNIX для каталога файлов в python - PullRequest
0 голосов
/ 25 января 2019

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

Я использую python 2.7, поэтому использую метод subprocess.call.Я получаю сообщение об ошибке «объект bool не итеративный», которое, как я предполагаю, связано с той частью, в которой я пытаюсь записать выходные файлы, так как при запуске следующего сценария через консоль я получаю ожидаемый конкретный выводк исполняемому файлу в окне консоли:

import subprocess
import os

for inp in os.listdir('/path/to/input/directory/'):
    subprocess.call(['/path/to/UNIX/executable', inp])

Мой код в настоящее время таков:

import subprocess
import os

for inp in os.listdir('/path/to/input/directory/'):
    out = ['/path/to/output/directory/%s' % inp]
    subprocess.call(['/path/to/UNIX/executable', inp] > out)

Однако эта вторая партия кода возвращает ошибку "'bool' is not iterable".

Я предполагаю, что решение довольно тривиально, поскольку это не сложная задача, однако, как новичок, я не знаю, с чего начать!

РЕШЕНО: после @ barak-itkin'sответ, для тех, кто может столкнуться с этой проблемой в будущем, код был успешно выполнен с использованием следующего:

import subprocess
import os

for inp in os.listdir('/path/to/input/directory/'):
    with open('/path/to/output/directory/%s' % inp, 'w') as out_file:
        subprocess.call(['/path/to/UNIX/executable', inp], stdout=out_file)

1 Ответ

0 голосов
/ 25 января 2019

Чтобы записать вывод файла subprocess.call в файл, вам нужно будет либо использовать > path/to/out как часть самой команды, либо сделать это «правильно», указав файл, в который должен быть направлен вывод :

# Option 1:
# Specify that the command is using a "shell" syntax, meaning that
# things like output redirection (such as with ">") should be handled
# by the shell that will evaluate the command
subprocess.call('my_command arg1 arg2 > /path/to/out', shell=True)

# Option 2:
# Open the file to which you want to write the output, and then specify
# the `stdout` parameter to be that file
with open('/path/to/out', 'w') as out_file:
    subprocess.call(['my_command', 'arg1', 'arg2'], stdout=out_file)

Это работает для вас?

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