将stdin输入重定向到python中线程进程的文件
我有一个python脚本,它创建了一个线程来执行带有“subprocess”模块的外部程序。现在,这个外部程序非常简单,从stdin中获取一个数字并打印:将stdin输入重定向到python中线程进程的文件,python,multithreading,Python,Multithreading,我有一个python脚本,它创建了一个线程来执行带有“subprocess”模块的外部程序。现在,这个外部程序非常简单,从stdin中获取一个数字并打印: #include <stdio.h> main(){ int numero; printf("Inserisci numero: "); scanf("%d",&numero); switch(numero){ case 1: printf("uno\n");
#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");
}
}
脚本如下所示:
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
有什么问题吗?感谢大家的帮助。您假设python的stdout是子流程的stdin,但事实并非如此。请查看子流程的文档:。我相信对于您的情况,您可以使用popen,为stdin传递一个openfile对象,将参数写入该file对象,然后使用communicate获得结果
我想补充一点,我怀疑这个过程对于你需要的东西来说过于复杂了,但是这个例子必须只是一个例子,所以很难说它到底有多复杂 我不明白这个人是怎么工作的。就我而言,我必须这样做吗<代码>>>>导入shlex,子流程>>>命令行=原始输入()-输入test.txt-输出“out.txt”-cmd“a.out'>>>>args=shlex.split(命令行)>>>p=subprocess.Popen(args),用于重定向stderr?
[vbruscin@lxplus0044 python]$ python filtro.py ./a.out test.txt
1
2
3
Inserisci numero: [vbruscin@lxplus0044 python]$ caso default