使用 subprocess.Popen 搞乱 Ubuntu 终端输出

问题描述 投票:0回答:2

使用 subprocess.Popen 搞乱 Ubuntu 终端输出

import subprocess
import time

subprocess.Popen("sudo ./agt_internal", shell=True, cwd="/home/boblittle/AGT/")
time.sleep(10)

for i in range(10):
    print('Good Morning America')

终端输出混乱。有什么建议么?

def start_agt_pmlog():
    command = 'sudo ./agt_internal -unilog=PM'
    args = shlex.split(command)
    print(f'Starts AGT PMLog')
    subprocess.Popen(args, shell=False, cwd="/home/boblittle/AGT/", stdout=subprocess.PIPE, stderr=subprocess.PIPE)

我通过添加上面的函数用建议的解决方案更改了代码。它没有帮助。

python ubuntu subprocess
2个回答
0
投票

你应该使用 shlex.split(),你缺少一个双引号,你还应该将 stdout 和 stderr 参数传递给 subprocess.Pope 以避免你的终端混乱。

import subprocess
import time
import shlex

command = "sudo ./agt_internal"
args = shlex.split(command)

subprocess.Popen(args, shell=False, cwd="/home/boblittle/AGT/", stdout=subprocess.PIPE, stderr=subprocess.PIPE)
time.sleep(10)

for i in range(10):
    print('Good Morning America')

0
投票

找到一个简单的解决方案。添加 subprocess.run("reset", shell=True)。它清除了终端,但对我来说已经足够了。

import subprocess
import time

subprocess.Popen("sudo ./agt_internal", shell=True, cwd="/home/boblittle/AGT/")
time.sleep(10)

subprocess.run("reset", shell=True)
for i in range(10):
    print('Good Morning America')
© www.soinside.com 2019 - 2024. All rights reserved.