2011-12-23 86 views
1

我有一個用於Linux的小型內部Python腳本,它在用戶$ HOME目錄中創建/home/user/environ_script.sh文件,然後加載通過如何在內存中創建文件句柄並將其傳遞給Python中的外部命令

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

腳本在它們的殼環境中工作正常但我不知道這是否可以不用在所有寫入磁盤做些什麼呢?類似於

foo <(command)

如何bash的 進程替換命令,因爲富期望一個文件句柄通過臨時文件句柄的/ dev/FDX提供「命令」輸出作爲輸入foo的。

+0

查看[tempfile](http://docs.python.org/library/tempfile.html)模塊? – wim 2011-12-23 04:26:37

+0

hmm ..閱讀tempfile.SpooledTemporaryFile().. – joshbaptiste 2011-12-23 04:46:53

+0

相關:http://stackoverflow.com/q/8467588/ – jfs 2011-12-25 02:24:47

回答

1

我認爲你正在尋找的是一個named pipe,那就是,對於可以用作文件的進程間通信的機制,但不寫入到磁盤:

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方面,打開相同的管道進行寫入,寫入一些內容並關閉管道。子進程接收管道的內容並繼續,就像從真實文件中讀取內容一樣。

+0

這將工作如果「bash --rcfile」可以從標準輸入讀取,但它只接受文件句柄。 – joshbaptiste 2011-12-24 19:39:13

+0

我想我現在瞭解您的要求,並且已經更新了我的回覆。 – jcollado 2011-12-25 00:39:16

+0

啊太棒了,忘了命名管道..這個解決方案工作的很好,謝謝! – joshbaptiste 2011-12-25 03:28:36

相關問題