gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 18:38:21 24 4
gpt4 key购买 nike

我在 python 中有一个脚本,它创建一个线程来执行带有“subprocess”模块的外部程序。现在,这个外部程序非常简单,从标准输入中获取一个数字并打印:

#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

有什么问题?感谢大家的帮助。

最佳答案

您假设您的 Python 的标准输出是您的子进程的标准输入,但事实并非如此。查看子流程的文档:https://docs.python.org/2/library/subprocess.html .我相信对于您的情况,您可以使用 popen,为 stdin 传递一个打开的文件对象,将您的参数写入该文件对象,然后使用通信来获取结果。

我要补充一点,我怀疑这个过程对于你需要的东西来说过于复杂了,但这个例子只能是一个例子,所以很难说它真的复杂到什么程度。

关于python - 将 stdin 输入重定向到 python 中线程进程的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30129977/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com