Как использовать метод subprocess.run в python?

Я хотел запускать внешние программы с помощью python, но получаю сообщение об ошибке, говорящее, что у меня нет файла

код, который я написал:

import subprocess

subprocess.run(["ls", "-l"])

Выход:

Traceback (most recent call last):
  File "C:\Users\hahan\desktop\Pythonp\main.py", line 3, in <module>
    subprocess.run(["ls", "-l"])
  File "C:\Users\hahan\AppData\Local\Programs\Python\Python310\lib\subprocess.py", line 501, in run
    with Popen(*popenargs, **kwargs) as process:
  File "C:\Users\hahan\AppData\Local\Programs\Python\Python310\lib\subprocess.py", line 969, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "C:\Users\hahan\AppData\Local\Programs\Python\Python310\lib\subprocess.py", line 1438, in _execute_child
    hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] The system cannot find the file specified

Я ожидал, что он вернет файлы в этом каталоге

Что произойдет, если вы наберете «ls -l» в командной строке? У вас есть команда `"ls" на вашем компьютере с Windows? Он обычно доступен на Linux и Mac. Я не уверен насчет последних окон, но исторически он был доступен только в окнах с внешними пакетами.

tdelaney 11.12.2022 19:56

IIRC, в Windows нет команды ls (за исключением PowerShell, где на самом деле это псевдоним для Get-ChildItem), поэтому вы ее установили? Если да, то в PATH?

wjandrea 11.12.2022 19:59
dir может работать, если вы установите shell=True. ls и dir подходят для примеров, но можно использовать эквивалент python os.listdir или, может быть, glob.glob или что-то в модуле pathlib. Вы можете попробовать какой-нибудь известный .exe в своей системе, если вы просто экспериментируете.
tdelaney 11.12.2022 20:19
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
298
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Трассировка стека предполагает, что вы используете Windows в качестве операционной системы. ls не то, что вы обычно найдете на компьютере с Windows, если не используете что-то вроде CygWin.

Вместо этого попробуйте один из следующих вариантов:

# use python's standard library function instead of invoking a subprocess
import os
os.listdir()
# invoke cmd and call the `dir` command
import subprocess
subprocess.run(["cmd", "/c", "dir"])
# invoke PowerShell and call the `ls` command, which is actually an alias for `Get-ChildItem`
import subprocess
subprocess.run(["powershell", "-c", "ls"])

ls не является командой Windows. Аналогом Windows является dir, поэтому вы можете сделать что-то вроде

import subprocess
subprocess.run(['cmd', '/c', 'dir'])

Однако, если вы действительно просто пытаетесь вывести каталог, было бы намного лучше (и переносимее) использовать что-то вроде os.listdir()

import os
os.listdir()

или pathlib

from pathlib import Path
list(Path().iterdir())

Другие вопросы по теме