У меня есть скрипт на python, который создает поток, который выполняет внешнюю программу с модулем «subprocess». Теперь, эта внешняя программа очень проста, возьмите номер из стандартного ввода и печати:Перенаправить ввод stdin в файл для процесса потока в python
#include <stdio.h>
main(){
int numero;
printf("Inserisci numero: ");
scanf("%d",&numero);
switch(numero){
case 1:
printf("uno\n");
break;
case 2:
printf("due\n");
break;
default:
printf("caso default\n");
}
}
Теперь, я написал скрипт в Python, которые принимают входные данные из текстового файла; скрипт работает в режиме наблюдения:
python filtro.py ./a.out test.txt
и сценарий является продолжением:
import sys
import subprocess
import threading
import fileinput
class Filtro:
#Costruttore
def __init__(self,cmd):
#Funzione di esecuzione thread
def exec_cmd():
try:
subprocess.check_call(cmd, shell=True)
except subprocess.CalledProcessError:
print "Il comando", cmd, "non esiste. Riprovare."
#Generazione thread demone
self.thr=threading.Thread(name="Demone_cmd",target=exec_cmd)
self.thr.setDaemon(True)
self.thr.start()
def inp(self,txt):
for line in fileinput.input(txt):
print line
filtro=Filtro(sys.argv[1])
filtro.inp(sys.argv[2])
Беда в том, что ввод из файла игнорируется, и выход заключается в следующем:
[[email protected] python]$ python filtro.py ./a.out test.txt
1
2
3
Inserisci numero: [[email protected] python]$ caso default
В чем проблема? Спасибо всем за помощь.
Я не понимаю, как это работает. В моем случае, Должен ли я сделать это? '>>> import shlex, подпроцесс >>> command_line = raw_input() . -input test.txt -output "out.txt" -cmd "a.out '" >>> args = shlex.split (command_line) >>> p = subprocess.Popen (args) ' И для перенаправления STDERR? –