sh:1:语法错误:重定向意外的Python / Bash

时间:2016-11-05 00:44:24

标签: python bash shell bioinformatics

我的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("------------------------------------------")

2 个答案:

答案 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不可见。