我有一个PYTHON脚本,它接受一个输入文件并给出一个输出文件。输入文件和输出文件被指定为系统argv[1] 和[2]如下:
myscript.py input.file output.file
不幸的是,需要对输入文件进行预处理以满足脚本的要求。我可以预处理原始文件并转换为可接受的格式。预处理步骤如下:
^{pr2}$但是,有超过1000个这样的文件,为了节省一些存储空间,我希望脚本通过进程替换来获取预处理的数据,我在这里找到了一个解决方案:https://superuser.com/questions/1070265/how-to-pipe-awk-command-output-to-python-as-first-argument
因此,以下方法非常有效:
myscript.py <(awk 'NR % 4 == 1 {print ">" $0 } NR % 4 == 2 {print $0}' input.fastq) output_processed.fa
但是,正如我提到的,我有1000个这样的文件,我编写了一个python脚本来循环所有文件,然后将上面的命令嵌套在其中操作系统如下所示
os.system("myscript.py <(awk 'NR % 4 == 1 {print ">" $0 } NR % 4 == 2 {print $0}' input.fastq) output_processed.fa")
但是,这次运行脚本时,出现以下错误:
sh: -c: line 0: syntax error near unexpected token `('
sh: -c: line 0: `myscript.py <(awk 'NR % 4 == 1 {print ">" $0 } NR % 4 == 2 {print $0}' input.fastq) output_processed.fa'
对于同一个错误,我可以找到许多答案,但没有一个对我有效。我有一些我尝试过的链接:
https://askubuntu.com/questions/348942/why-does-my-python-script-fail-with-syntax-errors
https://askubuntu.com/questions/656425/syntax-error-near-unexpected-token?rq=1
https://askubuntu.com/questions/656425/syntax-error-near-unexpected-token
https://askubuntu.com/questions/372926/bash-syntax-error-near-unexpected-token
当我使用上述解决方案时,我得到了EOL错误
我开始知道“(”是一个错误的语法从这里:bash: syntax error near unexpected token `('
然后我试着用“/”键,结果出现了以下错误:
IOError: [Errno 2] No such file or directory: '/<(awk NR % 4 == 1 {print ">" $0 } NR % 4 == 2 {print $0} input.fastq)
你能给我提个解决办法吗?在
显式地使用bash作为进程替换
我将
">"
字符串从awk主体中取出,以减少嵌套引号的级别。在或者使用默认的/bin/sh并将awk输出写入临时文件。在
^{pr2}$如果您控制
myscript.py
,允许它接受stdin上的数据而不是文件名,这样您就可以编写相关问题 更多 >
编程相关推荐