首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >传递给os.system()的外壳命令失败: sh: 2:语法错误:"|“意外

传递给os.system()的外壳命令失败: sh: 2:语法错误:"|“意外
EN

Stack Overflow用户
提问于 2016-11-05 14:31:34
回答 2查看 1.8K关注 0票数 0

当我在bash中运行我的脚本时,我得到了错误:sh: 2: Syntax error: "|" unexpected。我不知道为什么,我想在这里使用管道,在perl中有一个脚本可以使用该命令,但在Python中我需要它。

输入示例(文本文件):

代码语言:javascript
运行
AI代码解释
复制
Kribbella flavida
Saccharopolyspora erythraea
Nocardiopsis dassonvillei
Roseiflexus sp.

脚本:

代码语言:javascript
运行
AI代码解释
复制
#!/usr/bin/python

import sys import os

input_ = open(sys.argv[1],'r') output_file = sys.argv[2]
#stopwords = open(sys.argv[3],'r')



names_board = []

for name in input_:
    names_board.append(name.rstrip())
    print(name) for row in names_board:    
    print(row)    
    os.system("esearch -db pubmed -query %s | efetch -format xml | xtract -pattern PubmedArticle -element AbstractText >> %s" % (name,
output_file))
EN

回答 2

Stack Overflow用户

发布于 2016-11-05 15:18:03

一个可能不相关的问题是,您没有在命令中正确地引用输入和输出文件名。使用

代码语言:javascript
运行
AI代码解释
复制
os.system('esearch -db pubmed -query "%s" | efetch -format xml | xtract -pattern PubmedArticle -element AbstractText >> "%s"' % (name, output_file))

然而,即使这样对于所有合法的文件名(例如包含双引号的文件名)也不是万无一失的。我建议使用subprocess模块而不是os.system,将shell完全排除在进程之外

代码语言:javascript
运行
AI代码解释
复制
esearch = ["esearch", "-db", "pubmed", "-query", name]
efetch = ["efetch", "-format", "xml"]
xtract = ["xtract", "-pattern", "PubmedArticle", "-element", "AbstractText"]
with open(sys.argv[2], "a") as output_file:
    p1 = subprocess.Popen(esearch, stdout=subprocess.PIPE)
    p2 = subprocess.Popen(efetch, stdin=p1.stdout, stdout=subprocess.PIPE)
    subprocess.call(xtract, stdin=p2.stdout, stdout=output_file)
票数 2
EN

Stack Overflow用户

发布于 2016-11-06 00:48:53

问题是name包含的换行符终止了从输入读取的行。当您在shell命令中插入name时,也会插入换行符,然后shell会将其视为第一个命令的结尾。但是,第二行以管道符号开头,这是一个语法错误:管道符号必须位于同一行上的命令之间。

sh在第2行报告了一个错误,而该命令似乎只包含一行,这是一个很好的提示,表明这是问题所在。然而,在替换之后,它是两行,第二行是有问题的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40439374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档