首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于TypeError而失败的Python子进程: bufsize必须是整数

由于TypeError而失败的Python子进程: bufsize必须是整数
EN

Stack Overflow用户
提问于 2022-09-09 07:45:54
回答 1查看 134关注 0票数 0
代码语言:javascript
复制
I have a command where it should execute in the path which I have given as input in the subprocess. I'm getting the following error when tried to execute it. 
代码语言:javascript
复制
command = "bazel run //ros/src/bag_to_yaml:bag_to_yaml -- "
command = command + " ".join(tracks_ids)

print(command)

path1 = "/home/terli.vaibhav/development/github.robot.car/cruise/cruise/develop"
p = subprocess.Popen(command, path1 ,bufsize=1, shell = True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

这就是我得到的TypeError错误: bufsize必须是一个整数。

代码语言:javascript
复制
Traceback (most recent call last):
  File "example.py", line 45, in <module>
    execute_subprocess(output_dir, segment, vai)
  File "example.py", line 31, in execute_subprocess
    p = subprocess.Popen(command, path1 ,shell = True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
  File "/usr/lib/python3.6/subprocess.py", line 629, in __init__
    raise TypeError("bufsize must be an integer")
TypeError: bufsize must be an integer
EN

回答 1

Stack Overflow用户

发布于 2022-09-09 07:53:22

在使用shell=True时,必须将整个命令行作为第一个参数。第二个论点恰好是bufsize。因此,您的代码将path1作为bufsize传递,您将得到该错误。您可能想要这样做:

代码语言:javascript
复制
cmdline = command + ' ' + path1
p = subprocess.Popen(cmdline,bufsize=1, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

顺便问一下:

  • --您指定的是免费的shell=True,因为您的代码不使用任何shell特性。这将为nothing.
  • Depending打开代码的安全漏洞,您可以使用subprocess.check_output而不是Popen从子进程获取输出。

因此,我会重写您的代码如下所示:

代码语言:javascript
复制
path1 = "/home/terli.vaibhav/development"
cmdline = ['bazel', 'run', '//ros/src/bag_to_yaml:bag_to_yaml', '--'] + track_ids + [path1]
output = subprocess.check_output(cmdline)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73658891

复制
相关文章

相似问题

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