shell 如何使用python子进程在python脚本中通过提供参数运行另一个文件夹中的c++可执行文件?

ax6ht2ek  于 2022-11-16  发布在  Shell
关注(0)|答案(2)|浏览(192)

我正在运行一个python脚本文件,它应该在其中运行来自另一个文件夹的带有一些参数的c++可执行文件。
可执行文件位于ubuntu根目录(即(~/camera_intrinsic_calibration)文件夹)中
通常我在终端上运行的文件夹位置如下:

./pngCamCalStep1 /home/nvi/Perception/09-22-22/data/60_left/%04d.png 12 8 0.05

其中./pngcamcalstep1是我的c++可执行文件,其他是需要传递的参数。
因此,在脚本文件中,我尝试使用subprocess执行以下操作,但没有一个成功:

result = subprocess.call(["./pngCamCalStep1", "home/nvi/Perception/sensor_0/left-%04d.png", "12" ,"8", "0.05"], check =True, capture_output=True, cwd='/home/nvi/camera_intrinsic_calibration/',shell =True)

result = subprocess.run(shlex.split("./pngCamCalStep1 home/nvi/Perception/sensor_0/left-%04d.png 12 8 0.05"), check =True, capture_output=True, cwd='/home/nvi/camera_intrinsic_calibration/', shell =True)

它不起作用,输出如下:

Traceback (most recent call last):
  File "/home/nvi/catkin_ws/src/camera_calibration/src/camera_calibration/camera_calibrator.py", line 340, in on_mouse
    self.c.do_calibration()
  File "/home/nvi/catkin_ws/src/camera_calibration/src/camera_calibration/calibrator.py", line 1280, in do_calibration
    result = subprocess.call(["./pngCamCalStep1", "home/nvi/Perception/sensor_0/left-%04d.png", "12" ,"8", "0.05"], check =True, capture_output=True, cwd='/home/nvi/camera_intrinsic_calibration/',shell =True)
  File "/usr/lib/python3.8/subprocess.py", line 340, in call
    with Popen(*popenargs, **kwargs) as p:
TypeError: __init__() got an unexpected keyword argument 'check'

谁能告诉我如何解决这个问题?
从另一个文件夹调用或运行C++可执行文件并提供其输入参数的正确命令是什么?

0x6upsns

0x6upsns1#

您的语法基本正确。
错误消息非常清楚:subprocess.call(),它使用subprocess.popen类作为后端,不接受关键字参数'check'
请删除该参数,然后重试。
如果您希望在被调用的进程返回非零返回代码时引发CalledProcessError,请改用subprocess.check_call()。

gev0vcfq

gev0vcfq2#

好吧,我已经把整个参数在一个单引号,然后它的工作,删除,检查和capture_output:

subprocess.call(["./pngCamCalStep1 home/nvi/Perception/sensor_0/left-%04d.png 12 8 0.05"], cwd='/home/nvi/camera_intrinsic_calibration/',shell =True)

相关问题