Как создать дескриптор файла в памяти и перейти к внешней команде в Python - PullRequest
1 голос
/ 23 декабря 2011

У меня есть небольшой собственный скрипт Python для Linux, который создает файл /home/user/environ_script.sh в каталоге $ HOME пользователей, а затем загружает среду в их оболочку с помощью

subprocess.call('bash --rcfile /home/user/environ_script.sh')

Скрипт работает нормально, но мне было интересно, можно ли это сделать без записи на диск вообще? Подобно тому, как Баш команда подстановки процесса

foo <(command)

обеспечивает вывод "команды" в качестве ввода для foo через временный дескриптор файла / dev / fdx, поскольку foo ожидает дескриптор файла.

1 Ответ

2 голосов
/ 23 декабря 2011

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

import subprocess
import os

fifo_name = 'my-bash.rc'
os.mkfifo(fifo_name)

try:
    process = subprocess.Popen(['bash', '--rcfile', fifo_name])
    with open(fifo_name, 'w') as f:
        f.write('echo "This is my-bash.rc"')
    process.wait()
finally:
    os.remove(fifo_name)

В приведенном выше примере именованный канал создается и передается подпроцессу, чтобы открыть его для чтения.На стороне python тот же канал открыт для записи, некоторое содержимое записано, а канал закрыт.Подпроцесс получает содержимое канала и продолжает, как если бы это содержимое было прочитано из реального файла.

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