我的python cmd脚本有问题。 我不知道为什么它不起作用。我的代码可能有问题。 我试图通过我的python脚本在cmdline中运行该程序。
我在bash中遇到错误" sh:1:语法错误:重定向意外"
请帮助我只是生物学家:)
我正在使用spyder(anaconda)/ Ubuntu
#!/usr/bin/python
import sys
import os
input_ = sys.argv[1]
output_file = open(sys.argv[2],'a+')
names = input_.rsplit('.')
for name in names:
os.system("esearch -db pubmed -query %s | efetch -format xml | xtract -pattern PubmedArticle -element AbstractText >> %s" % (name, output_file))
print("------------------------------------------")
答案 0 :(得分:5)
output_file
是一个文件对象。当您执行"%s" % output_file
时,生成的字符串类似于"<open file 'filename', mode 'a+' at 0x7f1234567890>"
。这意味着os.system调用正在运行像
command... >> <open file 'filename', mode 'a+' at 0x7f1234567890>
<
之后的>>
导致“语法错误:重定向意外”错误消息。
要解决此问题,请不要在Python脚本中打开输出文件,只需使用文件名:
output_file = sys.argv[2]
答案 1 :(得分:1)
我在下一行遇到了类似的错误:
os.system('logger Status changed on %s' %s repr(datetime.now())
事实上,正如游牧类型所述,问题在于运行普通的操作系统命令。该命令可以包括特殊字符。就我而言,这是<
。
因此,我没有显着更改操作系统命令,而是添加了引号,这有效:
os.system('logger "Status changed on %s"' %s repr(datetime.now())
引用使传递的参数内容对shell不可见。