小编bot*_*cap的帖子

如何在 async def 函数中正确使用 asyncio.create_subprocess_shell()?

我正在尝试编写一个简单的子进程程序,它将调用一个长时间运行的 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)

该程序几乎立即运行并失败。此代码生成的错误是: …

python-3.x python-asyncio

3
推荐指数
1
解决办法
5202
查看次数

iterm2 shell提示符现在显示“(base)”

我已经使用iterm2几年了,它很棒。但是最近,我的提示发生了奇怪的变化,我无法确定它在告诉我什么。最初,我的提示如下:

<username>@<hostname>:<current_dir>$

现在,提示如下:

(base) $<username>@<hostname>:<current_dir>$

我正在运行Mojave,并检查了我的.bashrc文件-那里的一切看上去都很正常。

有谁知道“(基数)”是什么吗?它告诉我什么?我该如何摆脱呢?

iterm2

2
推荐指数
2
解决办法
622
查看次数

标签 统计

iterm2 ×1

python-3.x ×1

python-asyncio ×1