加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 使用Python子进程模块将输入传递给可执行文件

发布时间:2020-12-15 18:26:59 所属栏目:安全 来源:网络整理
导读:我有一个名为0.in的输入文件.为了得到输出,我做./a.out在 Bash Shell中.in. 现在,我有几个这样的文件(超过500个),我想使用Python的子进程模块自动执行此过程. 我试过这样做: data=subprocess.Popen(['./a.out',' 0.in'],stdout=subprocess.PIPE,stdin=subpr
我有一个名为0.in的输入文件.为了得到输出,我做./a.out<在 Bash Shell中.in.

现在,我有几个这样的文件(超过500个),我想使用Python的子进程模块自动执行此过程.

我试过这样做:

data=subprocess.Popen(['./a.out','< 0.in'],stdout=subprocess.PIPE,stdin=subprocess.PIPE).communicate()

当我运行它时,没有打印任何内容(数据[0]为空白).做我想做的事的正确方法是什么?

使用<重定向是一个shell功能,而不是python功能. 有两种选择:
>使用shell = True并让shell处理重定向:
data = subprocess.Popen(['./a.out < 0.in'],shell=True).communicate()

>让python处理重定向:

with open('0.in') as f:
    data = subprocess.Popen(['./a.out'],stdin=f).communicate()

第二种选择通常是首选,因为它避免了外壳的变幻莫测.

如果要捕获数据中的stderr,则将stderr = subprocess.PIPE添加到Popen命令.否则,stderr将出现在终端上或发送python的错误消息的任何地方.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读