subprocess python filenotfounderror: [winerror 2]
This code runs the ls
command, which is available on all POSIX-conforming systems.
You are using Microsoft Windows. Microsoft Windows does not conform to POSIX by default. For instance, there is no ls
binary. Therefore, subprocess cannot find the file ls
, and thus emits a FileNotFoundError
.
You can install Microsoft's Bash on Windows, which will give you ls.
However, the pythonic and more portable way to list a directory is not to use subprocess in the first place, but the built-in os.listdir
:
import os
print(os.listdir('../input'))
learing
Updated on June 05, 2022Comments
-
learing almost 2 years
I've been using Jupyter Notebook to learn Principal Component Analysis from kaggle), but when I run this code
from subprocess import check_output print(check_output(["ls", "../input"]).decode("utf8"))
I got an error below
FileNotFoundError Traceback (most recent call last) <ipython-input-3-de0e39ca3ab8> in <module>() 1 from subprocess import check_output ----> 2 print(check_output(["ls", "C:/Users/wanglei/Documents/input"]).decode("utf8")) D:\Anaconda3\lib\subprocess.py in check_output(timeout, *popenargs, **kwargs) 624 625 return run(*popenargs, stdout=PIPE, timeout=timeout, check=True, --> 626 **kwargs).stdout 627 628 D:\Anaconda3\lib\subprocess.py in run(input, timeout, check, *popenargs, **kwargs) 691 kwargs['stdin'] = PIPE 692 --> 693 with Popen(*popenargs, **kwargs) as process: 694 try: 695 stdout, stderr = process.communicate(input, timeout=timeout) D:\Anaconda3\lib\subprocess.py in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds) 945 c2pread, c2pwrite, 946 errread, errwrite, --> 947 restore_signals, start_new_session) 948 except: 949 # Cleanup if the child failed starting. D:\Anaconda3\lib\subprocess.py in _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, unused_restore_signals, unused_start_new_session) 1222 env, 1223 cwd, -> 1224 startupinfo) 1225 finally: 1226 # Child is launched. Close the parent's copy of those pipe
The path is correct, and it seems that all the call from subprocess will fail similarly.
Does anyone have any idea why this is happening?
-
phihag about 7 yearsThat is already the default for
cwd
. The problem here is also not related to the argument ofls
(if it were, there would not be aFileNotFound
error, but an error message from ls), but the binary itself. -
learing about 7 yearsunfortunately,it throws the same error.could this be the problem of subprocess module?
-
learing about 7 yearsYes, you make a good point,and this works,but could you analyze why the subprocess module didn't work?Thx
-
phihag about 7 yearsThe subprocess module works fine. There is just no
ls
binary on your filesystem. Therefore, subprocess cannot find thels
file, and thus emits anFileNotFoundError
. -
learing about 7 yearsYes,I think you are right,all the example I run came from official website was baesd on POSIX,that's why the call all failed,bacause the Windows just do not follow the POSIX. LOL
-
Karan over 5 yearsWe can just use, print(os.listdir('input')) , if you are using os package.