首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >传递给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

复制
相关文章
Apple Developer Program注册时所需的内容
探索 无限可能 针对 Apple 平台进行开发意味着您能够轻松获取最新的 macOS、iOS、watchOS 和 tvOS 技术,这将为您带来无限可能,助您为全球各地用户奉上绝妙的 app。这些强大的平台都具有各自独特的功能和用户体验,却又紧密整合在一起,形成一个真正的生态系统。硬件、软件和服务完全协调一致,让您能够打造直观易用且真正无缝的多层面体验。 设计、开发、分发, 开创未来 包罗万象的工具和资源,加上交互式 Swift 编程语言和 Apple 的革命性技术,创新潜力无穷无尽。您可以探索如何开发非凡的 app,随时随地为用户呈上各种资讯、娱乐和服务。 Apple Developer Program 打造新一代 app。 成为会员后,可以获得最新的测试版软件。这样一来,您可以先客户一步,为新版系统开发 app 并进行测试。您还能够在自己的 app 中整合各种高级的 app 功能和服务,并通过 App Store 分发给逾十亿的客户。
iOSDevLog
2018/08/10
2K0
Apple Developer Program注册时所需的内容
Attention 待更新
注意力机制可以描述为一个函数,这个函数将query和一组key-value对映射成一个输出。
MachineLP
2020/03/18
4210
Attention 待更新
疑问总结--待问待资讯--持续更新
customer里的lombok都用的@RequiredArgsConstructor server用的@AllArgsConstructor 看到
名字是乱打的
2021/12/23
4840
vue要点记录(待更新)
Vue实例 每个 Vue 实例都会代理其 data 对象里所有的属性:vm.a===data.a //true 注意只有这些被代理的属性是响应的。 如果在实例创建之后添加新的属性到实例上,它不会触发视
mcq
2018/06/27
1.4K0
同步工具(未完待更新)
在JDK1.7中,同步工具主要包括CountDownLatch(一次性栅栏)、Semaphore(信号量)、CyclicBarrier(循环同步栅栏)、Exchanger(线程间交换器)和Phaser。下面的篇幅中,将依次讲述每种同步工具的概念、用法和原理。
JavaEdge
2022/11/29
4050
移动app漏洞收集(待整理)
http://www.anquan.us/static/bugs/wooyun-2015-0114241.html pageid:
全栈工程师修炼指南
2022/09/28
4240
使用uni-app开发小程序,关于小程序更新后与用户本地不会及时更新解决办法
在小程序更新开发版本之后,用户本地并没有对之前版本的小程序进行删除,那么再进入小程序的时候的版本是不会发生变化的,这是由于发版是异步执行,因此新版本将会覆盖的比较慢,本质是小程序的启动方式分为两种,冷启动与热启动。
wfaceboss
2019/05/08
2.9K0
使用uni-app开发小程序,关于小程序更新后与用户本地不会及时更新解决办法
浅谈Google蜘蛛抓取的工作原理(待更新)
首先,Google 蜘蛛寻找新的页面。然后,Google 对这些页面进行索引,以了解它们的内容,并根据检索到的数据对它们进行排名。爬行和索引是两个不同的过程,但是,它们都由爬行器执行。
海拥
2021/08/23
3.5K0
浅谈Google蜘蛛抓取的工作原理(待更新)
Mutation状态更新
Mutation中的处理方式是将整个commit的对象作为payload使用, 所以代码没有改变, 依然如下:
Qwe7
2022/05/31
6320
nginx 访问/apple-app-site-association
今天我们的ios说他那边需要放一个apple-app-site-association 文件 用来支持他那边的功能,先说一下要求 他要求给他一个线上官网的地址后面跟上他所需要文件的地址 比如 www.baidu.com/apple-app-site-association 文件 首先打开服务器nginx的配置文件
河湾欢儿
2021/01/21
1.9K0
什么是App热更新技术的最优解呢?
热更新是指软件不通过运营商店的软件版本更新审核,直接通过应用自行下载的软件数据更新的行为。
二山山记
2022/09/30
1.6K0
Vue-typescript 打包成app后如何自动更新
项目使用的是vue+ts,使用组件 vue-property-decorator 写法,具体请参考链接说明。
taixingyiji
2022/07/25
9900
Vue-typescript 打包成app后如何自动更新
OSX app 启动后在程序坞不显示
用回mac之后发现各种神奇的问题,比如cocos运行之后在程序坞中找不到,开的窗口多了之后每次想找到他得翻半天(主要是不会各种神奇的快捷键)。
obaby
2023/02/24
5600
Apple Developer支持大陆开发者注册苹果开发者计划
苹果在上月举行的全球开发者大会(WWDC)上宣布启用官方APP,名称“苹果开发者应用”(Apple Developer App),并在昨日的版本更新中苹果放出了针对中国开发者的一项福利。自今天开始,中国大陆地区的开发者可以通过这款APP更加轻松地注册 Apple Developer Program,并在 iPhone 或 iPad 上使用当地付款方式购买会员资格,因此对于没有Visa信用卡的开发中来说,将是一大福利。
xiangzhihong
2022/11/30
6840
苹果 IAP 新特性之启用服务端到服务端通知
服务器到服务器的通知是一项用于自动续订的服务。App Store 会将订阅状态的实时更改发送到您的服务器。PS:有关服务器通知包含的字段信息,请参阅 https://developer.apple.com/documentation/appstoreservernotifications。
HelloWorld杰少
2022/08/04
9190
苹果 IAP 新特性之启用服务端到服务端通知
Uniapp 更新APP
Uniapp打出来的升级包是 .wgt 的文件。将此文件夹上传到服务器上的static上。即:www.example.com/staitc/XXX.wgt
收心
2022/01/19
3650
WWDC22 - In App Purchase 更新总结
WWDC21 是历年来 In App Purchase(IAP,内购内购买)最大的变化,分别推出了 StoreKit 2、App Store Server API、App Store Server Notifications V2 三大特性,去年我们也编写了 《苹果iOS内购三步曲:App内退款、历史订单查询、绑定用户防掉单!--- WWDC21》 文章,所以我们本文不会再深入提及去年的更新,大家如果不太熟悉,可以先温习一下。本文将对今年 WWDC22 带来的变化,从整体的视角一起回顾。
37手游iOS技术运营团队
2022/07/11
4.9K0
WWDC22 - In App Purchase 更新总结
手把手教你制作Apple Watch App
北京时间2015年3月10日凌晨,Apple Watch正式对外发布,作为苹果公司的最新款产品,Apple Watch官网对两款国产应用进行了推荐,携程旅行App是其中之一。
携程技术
2018/02/23
1.7K0
分区操作后索引的状态
导读:DDL操作是否会导致索引失效的原则上是看是否引起数据发生变化,如果分区的数据发生了改变,则索引需要失效才能保证结果的准确性,如果数据没有发生变化,则索引的状态不会变为UNUSABLE。
数据和云
2020/02/27
8270
赶快更新!Apple 出现多个安全漏洞
The Hacker News 网站披露,苹果公司近日推出了 iOS、iPadOS、macOS 的安全更新,以解决一个 0day 漏洞(追踪为 CVE-2023-23529)。 研究表明,CVE-2023-23529 漏洞与 WebKit 开源浏览器引擎中的类型混淆错误有关,一旦攻击者成功利用,便可在目标系统上执行任意代码。 WebKit 是一个主要用于 Safari,Dashboard,Mail 和其它一些 Mac OS X 程序的开源浏览器引擎,在手机上的应用十分广泛(例如 Android、iPhon
FB客服
2023/02/24
5270
赶快更新!Apple 出现多个安全漏洞

相似问题

如何使连续三周或更长时间的用户有序使用?

316

如何让会话变量的时间更长?

10

如何让通知显示更长时间?

128

如何让会话持续时间更长?

19

Power BI -值连续增加3天或更长时间

1100
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文