如何使用Python子进程运行多个命令

sdnqo3pr  于 2023-01-14  发布在  Python
关注(0)|答案(1)|浏览(151)

我正在尝试运行三个命令与subprocess. Popen(),我不知道是哪个问题.这些命令在终端上运行正常,但在代码上运行不正常.以下是代码和输出.

str1 = os.path.join(install_path, "components", "esptool_py", "esptool", "esptool.py")
    print(install_path) #/home/laura/esp/esp/idf
    print(str1) #/home/laura/esp/esp-idf/components/esptool_py/esptool/esptool.py
    str_result = "error has occurred, check if the credential in the \"input.config\" are correct"
    
    cmd1 = f"cd {install_path}; . ./export.sh; python3 {str1} flash_id"
    cmd = subprocess.Popen(cmd1, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)

    gui.write_on_output_text("1.0", "checking database for incorrect input on device code")

    out, err = cmd.communicate()
    out_str = str(out.decode("utf-8"))

输出:

/home/laura/esp/esp-idf
/home/laura/esp/esp-idf/components/esptool_py/esptool/esptool.py
/bin/sh: 22: ./export.sh: [[: not found

正常工作的终端命令: cd/家庭/劳拉/esp/esp-idf;../www.example.com; python3/主页/劳拉/esp/esp-idf/组件/esptool_py/esptool/www.example.com闪存标识符'export.sh ; python3 /home/laura/esp/esp-idf/components/esptool_py/esptool/esptool.py flash_id`
我不知道为什么在终端工程,但在代码中没有.我不知道如果错误是找不到文件或命令.
谢谢你:)
我已经尝试了很多方法,首先我用了gnome-terminal命令,但是它不正确,因为我不想要一个新的终端,我只想发送这三个命令。
我知道,在终端工作,因为发送后的响应是好的,这是我所期望的,但在代码中不工作,我不知道这是因为Python找不到/bin/sh上的命令,或如果找不到文件"www.example.com".export.sh".
我的第三个命令也有这个问题,它找不到"www.example.com"esptool.py"

kcwpcxri

kcwpcxri1#

我用评论中的一个想法/决议来修正它。

subprocess.Popen(..., **executable='/bin/bash'**)

只是补充一下:)正如他们所说,问题是,我试图用“sh”运行

相关问题