【问题标题】:Running a command with python using subprocess [duplicate]使用子进程使用python运行命令[重复]
【发布时间】:2021-04-03 14:01:20
【问题描述】:

我想使用包子进程在 Python 中运行以下命令。

cd C:\Users\...\csv
attrib +U -P /s

在我看来,我想做一些类似的事情

import subprocess
cmd = [r'C:\Users\...\csv','attrib +U -P /s']
pro = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)

当我运行它时,我没有任何错误,但也没有任何反应,因此我认为代码中存在错误。 谢谢

【问题讨论】:

  • 问同样的问题,已经关闭,将产生相同的结果。您需要提供更多详细信息。你得到什么错误,更多细节。我们无法猜测。
  • @CodeLikeBeaker 是的,我们可以猜到 OP 想要做什么,因为他们已经指定了他们希望执行的两个命令,我们可以看到他们用来实现它的 Python 代码,并且可以清楚地看到看到它是错误的并且可以推断它会产生的错误,即OP想要cd到一个目录但是使用目录名称作为要执行的命令名称。
  • 这看起来像是这个How to run two commands in one subprocess call?的转贴

标签: python terminal subprocess


【解决方案1】:

正如您所拥有的那样,您正在尝试执行名为csv 的命令,而不是将目录更改为csv 目录。如果您想更改目录然后运行attrib 命令,请尝试:

import subprocess
import os

os.chdir(r'C:\Users\...\csv')
cmd = 'attrib +U -P /s'
pro = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True, text=True)
out, err = pro.communicate()
print(out, end='')

【讨论】:

  • 确实,感谢您的回答,并且确实以这种方式工作。但我的问题是我是否可以在不使用 os.chdir 命令的情况下完成所有操作。一种使用子进程在特定目录中运行命令的方法。原因是该文件夹是 OneDrive 文件夹,因此当我运行“os.chdir(r'C:\Users\...\csv')”时,它会下载文件夹中包含的所有文件。我希望这有助于理解为什么我需要这样做。
  • 在命令中指定目录路径怎么样:cmd = r'attrib +U -P C:\Users\...\csv /S' 可以吗?但是你为什么在你的问题中使用cd
最近更新 更多