此問題與python subprocess.Popen - write to stderr相同。但是沒有正確的答案。如何寫入Python子進程的stderr?
我知道這是正確的。
import sys
sys.stderr.write('abcd')
這裏是子過程(命名爲輸入)的代碼。我想讓子進程(輸入)打印由父進程寫入的字符串。
int main(int argc, char* argv[], char* envp[]){
char buf[5];
read(2, buf, 4);
buf[4]=0;
printf("%s\n", buf);
}
我想寫入一個Python子進程stderr。但是,這是不正確的。 (也許你可以糾正這種或只是把我介紹另一 方式。)
from subprocess import *
p = Popen(['./input'],stderr=PIPE)
p.stderr.write('abcd')
我有錯誤是這樣的。
IOError: File not open for writing
感謝您的幫助。
如果您成功做到這一點,您希望在哪裏出現「abcd」?它不會出現在終端上,因爲管道的一端連接到子流程,另一端連接到父進程。理論上它可以出現在子過程中,但它只會*寫入* stderr,而不是*讀取*。你想要發生什麼? –
子進程寫入其stderr。通過將其設置爲管道,您可以設置父級以從中讀取。如果你想讓子進程寫入它的stderr,它所執行的進程必須這樣做。如果你想讓這個錯誤消息進入父進程的stderr,那麼你應該什麼都不做,並且這個孩子會繼承父進程的stderr。 –
當你打開一個像這樣的子進程時,stderr通常作爲只讀流打開。當然,你正在得到那個錯誤。你究竟在做什麼以及爲什麼。在這種情況下,一些更詳細和具體的背景可能確實有幫助。 –