我正在尝试编写一个简单的子进程程序,它将调用一个长时间运行的 shell 命令,允许其他进程运行,然后在完成后执行一些清理任务。
不幸的是,我遇到了错误,只是让 shell 命令在 asyncio 事件循环中正确执行。行为是它看起来 python 从不等待 shell 脚本完成运行。我知道 shell 脚本可以工作,因为我可以从提示符手动运行它。我正在运行的 shell 脚本应该在大约 3-5 分钟内执行。
这是我的示例程序:
import asyncio
from asyncio.subprocess import PIPE, STDOUT
import subprocess
import signal
def signal_handler(signal, frame):
loop.stop()
client.close()
sys.exit(0)
async def run_async(loop = ''):
cmd = 'sudo long_running_cmd --opt1=AAAA --opt2=BBBB'
print ("[INFO] Starting script...")
await asyncio.create_subprocess_shell(cmd1, stdin = PIPE, stdout = PIPE, stderr = STDOUT)
print("[INFO] Script is complete.")
loop = asyncio.get_event_loop()
signal.signal(signal.SIGINT, signal_handler)
tasks = [loop.create_task(run_async())]
wait_tasks = asyncio.wait(tasks)
loop.run_until_complete(wait_tasks)
loop.close()
Run Code Online (Sandbox Code Playgroud)
该程序几乎立即运行并失败。此代码生成的错误是: …
我已经使用iterm2几年了,它很棒。但是最近,我的提示发生了奇怪的变化,我无法确定它在告诉我什么。最初,我的提示如下:
<username>@<hostname>:<current_dir>$
现在,提示如下:
(base) $<username>@<hostname>:<current_dir>$
我正在运行Mojave,并检查了我的.bashrc文件-那里的一切看上去都很正常。
有谁知道“(基数)”是什么吗?它告诉我什么?我该如何摆脱呢?