使用 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)
我通过添加上面的函数用建议的解决方案更改了代码。它没有帮助。
你应该使用 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')
找到一个简单的解决方案。添加 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')