Вот пример:
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)
При 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()
Я вижу это на 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