相关疑难解决方法(0)

在Python中调用外部命令

如何在Python脚本中调用外部命令(就像我在Unix shell或Windows命令提示符下键入它一样)?

python shell terminal command subprocess

4553
推荐指数
57
解决办法
325万
查看次数

为什么我只能在 async 函数中使用 await 关键字?

假设我有这样的代码

async def fetch_text() -> str:
    return "text "

async def show_something():
    something = await fetch_text()
    print(something)
Run Code Online (Sandbox Code Playgroud)

这很好。但后来我想清理数据,所以我做

async def fetch_text() -> str:
    return "text "

def fetch_clean_text(text: str) -> str:
    text = await fetch_text()
    return text.strip(text)

async def show_something():
    something = fetch_clean_text()
    print(something)
Run Code Online (Sandbox Code Playgroud)

(我可以清理里面的文本show_something(),但让我们假设show_something()可以打印很多东西并且不知道或不应该知道清理它们的正确方法。)

这当然是一个SyntaxError: 'await' outside async function. 但是——如果这段代码可以运行——当await表达式没有放在协程函数中时,它会在协程函数的上下文中执行。为什么不允许这种行为?

我在这个设计中看到了一位专业人士;在我的后一个例子中,你看不到show_something()的身体正在做一些可能导致其暂停的事情。但是如果我要创建fetch_clean_text()一个协程,它不仅会使事情复杂化,而且可能还会降低性能。拥有另一个本身不执行任何 I/O 的协程是没有意义的。有没有更好的办法?

python python-asyncio

16
推荐指数
2
解决办法
4万
查看次数

忙等待和轮询有什么区别?

来自维基百科关于投票的文章

计算机科学中的轮询或轮询操作是指客户端程序将外部设备的状态作为同步活动进行主动采样.轮询最常用于输入/输出(I/O),也称为轮询I/O或软件驱动的I/O.

轮询有时与忙等待轮询(忙等待)同义.在这种情况下,当需要I/O操作时,计算机除了检查I/O设备的状态之外什么都不做,直到它准备就绪,此时访问设备.换句话说,计算机等待设备准备就绪.
轮询还指的是重复检查设备是否准备就绪的情况,如果不是,则计算机返回到不同的任务.尽管不像繁忙等待那样浪费CPU周期,但这通常不如轮询,中断驱动I/O的替代方案那样有效.

因此,当一个线程不使用"条件变量"时,它会被称为"轮询"数据更改还是"忙等待"?

multithreading condition-variable polling busy-waiting

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

使用Python在同一进程中运行三个命令

我需要在Win32上运行这三个命令以进行性能分析/代码覆盖率报告.

vsperfcmd /start:coverage /output:run.coverage
helloclass
vsperfcmd /shutdown
Run Code Online (Sandbox Code Playgroud)

我不能一个地运行一个命令,因为应该在vsperfcmd的相同进程中分析helloclass可执行文件.

我想到的是制作一个批处理文件来运行这三个命令,并在Python中运行批处理文件.但是,我认为python应该有一种方法来执行启动shell和运行命令的等效操作.

  • 问:如何在Python中以相同的进程运行命令?
  • 问:或者,我如何在Python中启动命令shell并运行命令?

解决了

import subprocess
cmdline = ["cmd", "/q", "/k", "echo off"]
cmd = subprocess.Popen(cmdline, stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True)
batch = b"""\
rem vsinstr -coverage helloclass.exe /exclude:std::*
vsperfcmd /start:coverage /output:run.coverage
helloclass
vsperfcmd /shutdown
exit
"""
cmd.stdin.write(batch)
cmd.stdin.flush() # Must include this to ensure data is passed to child process
result = cmd.stdout.read()
print(result)
Run Code Online (Sandbox Code Playgroud)

python process launch

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

从python启动和停止外部进程

有没有办法从python启动和停止进程?我说的是在正常运行时用 ctrl+z 停止的继续进程。我想启动这个过程,等待一段时间然后终止它。我正在使用Linux。

这个问题不像我的,因为在那里,用户只需要运行这个过程。我需要运行它并停止它。

python linux subprocess external-process

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