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?
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'))