我正在寻找我的Windows计算机上所有Chrome实例的启动时间.在PowerShell中,我可以通过get-process chrome | Format-Table StartTime来做到这一点.

我想在一个python脚本中完成这项工作,并使用这个脚本的输出.我的代码如下:

import subprocess
call = "powershell get-process chrome | powershell Format-Table ProcessName, StartTime"
process = subprocess.Popen(call, stdout=subprocess.PIPE, stderr=None, shell=True)
outputs = process.communicate()
print(outputs)

此命令的输出为[''],即使在Chrome打开的情况下也是如此.

观察

如果我将call更改为

call = "powershell get-process chrome"

这将如预期的那样输出该表.我认为这个错误与管道操作员有关.

推荐答案

根据隐式呼叫via 101的方法,Your own helpful answer是解决问题的最快方法,这是由于shell=True(^-转义|可以保护它免受预先解释by 101的影响)

正如链接的答案所暗示的,不要使用powershell twice:将作为PowerShell管道的single command传递给对powershell.exe的单个调用,这意味着使用-Command(-c)参数.[1]

而在语法方面是100 is convenient(将整个命令行作为single string提供),它isn't necessarycauses overhead是因为必须创建额外的cmd.exe进程-更不用说need for careful escaping了,以防止cmd.exe对命令行的部分进行不必要的预先解释,就像手头的情况一样.

因此,consider calling 100 directly,在这种情况下,需要|no转义,但最好是pass the command as an array,其第一个元素是目标executable,其后续元素是单独指定的参数:

# ...
# Construct the PowerShell CLI call as an *array*:
# The target executable, followed by the arguments to pass to it.
call = "powershell.exe", "-c", "Get-Process chrome | Format-Table ProcessName, StartTime"

# Make the call, but do NOT use `shell=True`
process = subprocess.Popen(call, stdout=subprocess.PIPE, stderr=None)
# ...

顺便说一句:

  • 上述情况类似地适用于较高级别的subprocess.run()函数,除了asynchronous执行和响应运行进程的输出提供标准输入dynamically等高级用例外,该函数比它所基于的较低级别subprocess.Popen接口更可取.

[1]请注意,相比之下,PowerShell(Core)CLI为pwsh,现在为requires,使用-Command/-c.

[2]在Windows上,may仍然传递作为整个命令行的单个字符串(仅使用"..."引号),但在类似Unix的平台上,必须使用数组才能传递参数.(然而,在argument-less调用中,可执行文件的名称或路径在两个平台上都可以作为字符串而不是单元素数组传递.此外,with 101传递单个字符串(即使带有嵌入的参数)在两个平台上都有效,因为该字符串成为传递给shell 可执行文件的单个参数.)

Python相关问答推荐

使用from_pandas将GeDataFrame转换为polars失败,ArrowType错误:未传递numpy. dype对象

仿制药的类型铸造

SQLGory-file包FilField不允许提供自定义文件名,自动将文件保存为未命名

2D空间中的反旋算法

什么相当于pytorch中的numpy累积ufunc

加速Python循环

如何在solve()之后获得症状上的等式的值

OR—Tools中CP—SAT求解器的IntVar设置值

组/群集按字符串中的子字符串或子字符串中的字符串轮询数据框

Python列表不会在条件while循环中正确随机化'

与命令行相比,相同的Python代码在Companyter Notebook中运行速度慢20倍

如何使用Numpy. stracards重新编写滚动和?

下三角形掩码与seaborn clustermap bug

导入错误:无法导入名称';操作';

如何在Python请求中组合多个适配器?

使用SeleniumBase保存和加载Cookie时出现问题

应用指定的规则构建数组

分解polars DataFrame列而不重复其他列值

为什么我的scipy.optimize.minimize(method=";newton-cg";)函数停留在局部最大值上?

多索引数据帧到标准索引DF