Я хотел запускать внешние программы с помощью 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
Я ожидал, что он вернет файлы в этом каталоге
IIRC, в Windows нет команды ls (за исключением PowerShell, где на самом деле это псевдоним для Get-ChildItem), поэтому вы ее установили? Если да, то в PATH?
dir может работать, если вы установите shell=True. ls и dir подходят для примеров, но можно использовать эквивалент python os.listdir или, может быть, glob.glob или что-то в модуле pathlib. Вы можете попробовать какой-нибудь известный .exe в своей системе, если вы просто экспериментируете.






Трассировка стека предполагает, что вы используете 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())
Что произойдет, если вы наберете «ls -l» в командной строке? У вас есть команда `"ls" на вашем компьютере с Windows? Он обычно доступен на Linux и Mac. Я не уверен насчет последних окон, но исторически он был доступен только в окнах с внешними пакетами.