我在python中有一个脚本,它创建一个使用“subprocess”模块执行外部程序的线程。现在,这个外部程序非常简单,从stdin中取一个数字并打印:
#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])
问题是文件的输入被忽略,输出如下:
[vbruscin@lxplus0044 python]$ python filtro.py ./a.out test.txt
1
2
3
Inserisci numero: [vbruscin@lxplus0044 python]$ caso default
有什么问题?感谢大家的帮助。
答案 0 :(得分:1)
你假设你的python的stdout是你的子进程&#39; stdin,这不是真的。查看子进程的文档:https://docs.python.org/2/library/subprocess.html。我相信你的情况你可以使用popen,为stdin传递一个打开的文件对象,将你的参数写入该文件对象,然后使用communication来获得结果。
我补充一点,我怀疑这个过程对于你需要的东西而言过于复杂,但这个例子只能是一个例子,所以很难说它真正的程度过于复杂。