如何使用Python subprocess模块执行以下shell命令?
echo "input data" | awk -f script.awk | sort > outfile.txt
Run Code Online (Sandbox Code Playgroud)
输入数据将来自一个字符串,所以我实际上并不需要echo.我已经走到这一步了,任何人都可以解释我是如何通过它来解决的sort吗?
p_awk = subprocess.Popen(["awk","-f","script.awk"],
stdin=subprocess.PIPE,
stdout=file("outfile.txt", "w"))
p_awk.communicate( "input data" )
Run Code Online (Sandbox Code Playgroud)
更新:请注意,虽然下面接受的答案实际上没有回答问题,但我相信S.Lott是对的,最好避免首先解决这个问题!
我正在考虑制作一个程序,需要发送输入并从各种aircrack-ng套件工具中获取输出.我知道几个python模块,如subprocess,envoy,sarge和pexpect,它们将提供必要的功能.任何人都可以建议我应该使用或不使用,特别是因为我是python的新手.
谢谢
我试图在ruffus管道中使用Sailfish,它将多个fastq文件作为参数.我在python中使用子进程模块执行Sailfish,但是<()在子进程中调用即使在我设置时也不起作用shell=True.
这是我想用python执行的命令:
sailfish quant [options] -1 <(cat sample1a.fastq sample1b.fastq) -2 <(cat sample2a.fastq sample2b.fastq) -o [output_file]
Run Code Online (Sandbox Code Playgroud)
或(最好):
sailfish quant [options] -1 <(gunzip sample1a.fastq.gz sample1b.fastq.gz) -2 <(gunzip sample2a.fastq.gz sample2b.fastq.gz) -o [output_file]
Run Code Online (Sandbox Code Playgroud)
概括:
someprogram <(someprocess) <(someprocess)
Run Code Online (Sandbox Code Playgroud)
我将如何在python中执行此操作?子流程是正确的方法吗?
我习惯于编写很多AWK命令,但是,一直想用Python来做与awk相同的事情,而不需要编写.py文件.我在Python中有基础知识,但在命令行中没有.
例如,我有以下AWK命令.python的等价物是什么?
awk '/Classic.java/ {print $0}' somefile.log;
Run Code Online (Sandbox Code Playgroud)