Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将stdin输入重定向到python中线程进程的文件_Python_Multithreading - Fatal编程技术网

将stdin输入重定向到python中线程进程的文件

将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");

我有一个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");
  }

}
脚本如下所示:

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