Невозможно использовать fileinput.input в качестве стандартного ввода в subprocess.run.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно использовать fileinput.input в качестве стандартного ввода в subprocess.run.

Сообщение Anonymous »

У меня сложилось впечатление, что fileinput.input([path_1, path2, ...]) в принципе взаимозаменяем с open(path_1), за исключением того, что первый объединяет содержимое всех файлов данный. Однако fileinput.input ведет себя по-другому, когда передается как stdin в subprocess.run. То есть subprocess.run просто зависает и вообще ничего не читает из файла(ов).
Вот пример:
example.py:

Код: Выделить всё

import fileinput
import subprocess
import sys

idle_path = sys.exec_prefix + "/bin/idle3"
paths = [idle_path]

with fileinput.input(paths) as combined_file:
# with open(idle_path) as combined_file:
subprocess.run(["cat"], stdin=combined_file)

Вызов вышеуказанного, например. в консоли с Python example.py не завершается.
При open вместо fileinput.input он работает и создает содержимое / bin/idle3 как и ожидалось:

Код: Выделить всё

$ python example.py
#!/home/me/mambaforge/envs/testenv/bin/python3.12

from idlelib.pyshell import main
if __name__ == '__main__':
main()
Что там происходит? Как я могу передать объединенное содержимое нескольких файлов в любую команду, которую хочу использовать с subprocess.run?
Я вижу это на Python 3.12, но не уверен, что это что-то дает разница. На самом деле я пытаюсь запустить не команду cat, а subprocess.run([sys.executable, "-m", "cantools", "plot", "/path/to/vehicle.dbc"] , stdin=combined_candumps). (см. документацию по cantools). Запускать все это в оболочке на самом деле не вариант, потому что я хочу получить некоторые аргументы из графического интерфейса, написанные на Python. Хотя cantools написан на Python, он имеет API-интерфейс только для оболочки и не имеет документированного интерфейса Python. В этом причина обхода через subprocess.run.

Подробнее здесь: https://stackoverflow.com/questions/787 ... rocess-run
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»