gpt4 book ai didi

python - -c : line 0: syntax error near unexpected token `('

转载 作者:太空宇宙 更新时间:2023-11-04 10:11:29 25 4
gpt4 key购买 nike

我有一个接受输入文件并提供输出文件的 PYTHON 脚本。输入文件和输出文件被指定为 sys.argv[1] 和 [2],如下所示:

myscript.py input.file output.file

不幸的是,输入文件需要进行预处理以满足脚本的要求。我可以预处理原始文件并转换成可接受的格式。预处理步骤如下:

awk 'NR % 4 == 1 {print ">" $0 } NR % 4 == 2 {print $0}' filename.fastq > filename.fa

但是,有超过 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 中,如下所示

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 进行进程替换

os.system("bash -c \"myscript.py <(awk -v gt='>' 'NR % 4 == 1 {print gt $0 } NR % 4 == 2 {print $0}' input.fastq) output_processed.fa\"")

我将 ">" 字符串从 awk 主体中取出来减少嵌套引号的层数。

或使用默认的/bin/sh 并将 awk 输出写入临时文件。

os.system("awk 'NR % 4 == 1 {print \">\" $0 } NR % 4 == 2 {print $0}' input.fastq > temp && myscript.py temp output_processed.fa; rm -f temp")

如果您控制 myscript.py,让它接受标准输入中的数据而不是文件名,您就可以编写

os.system("awk '...' input.fastq | myscript.py output_processed.fa")

关于python - -c : line 0: syntax error near unexpected token `(' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48814579/

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