gpt4 book ai didi

python - 无法使用 stdin 在 python 解释器中线程化多个外部脚本

转载 作者:太空宇宙 更新时间:2023-11-03 18:56:40 24 4
gpt4 key购买 nike

我有以下脚本Perl 脚本(fasta.pl)接受输入文件(abc)并给出字符串。

 $ ./fasta.pl abc.txt

我第一次尝试

p1= subprocess.Popen(["./pdb_fasta.pl","abc.txt"],stdout=subprocess.PIPE);

然后我确认p1是一个文件对象

>>> type(p1.stdout)
<type 'file'>

我有另一个脚本,count.py,它将文件作为输入

$ ./count.py p1.stdout

现在,当我尝试为此脚本使用 p1.stdout 时,出现错误。我尝试了两种不同的方法第一个

p2= subprocess.Popen(["./count_aa.py",p1.stdout],stdout=subprocess.PIPE).stdout.read()

错误是

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/subprocess.py", line 595, in __init__
errread, errwrite)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/subprocess.py", line 1106, in _execute_child
raise child_exception
TypeError: execv() arg 2 must contain only strings

第二种方法:这里的错误是因为脚本 count_aa.py 需要一个文件作为参数,而 stdin 没有提供。

>>> p2= subprocess.Popen(["./count_aa.py"],stdin=p1.stdout,stdout=subprocess.PIPE).stdout.read()
Traceback (most recent call last):
File "./count_aa.py", line 4, in <module>
fil=open(sys.argv[1],'r').read()
IndexError: list index out of range
>>>

我正在考虑这一行以实现所需的结果,将一个子进程的输出作为输入传递给另一个子进程。但这并不像上面解释的那样起作用。

p1= subprocess.Popen(["./pdb_fasta.pl","abc.txt"],stdout=subprocess.PIPE)
p2= subprocess.Popen(["./count_aa.py"],stdin=p1.stdout,stdout=subprocess.PIPE).stdout.read()

可以解释一下这里的错误,并给出一个示例,其中 stdin 可能有用或如何在这种情况下使用。非常感谢!!

最佳答案

您的最后代码相当于以下 shell 命令。

./pdb_fasta.pl abc.txt | ./count_aa.py

要使最后的代码正常工作,请更改 count_aa.py 以从标准输入获取输入。例如:

import sys

n = 0
for line in sys.stdin:
n += 1
print(n)

关于python - 无法使用 stdin 在 python 解释器中线程化多个外部脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17119130/

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