首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子进程python文件错误:[winerror 2]

子进程python文件错误:[winerror 2]
EN

Stack Overflow用户
提问于 2017-03-29 16:35:44
回答 3查看 10.5K关注 0票数 12

我一直使用Jupyter Notebook来学习Principal Component Analysis from kaggle),但是当我运行以下代码时

代码语言:javascript
复制
     from subprocess import check_output
     print(check_output(["ls", "../input"]).decode("utf8"))

我在下面得到了一个错误

代码语言:javascript
复制
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

路径是正确的,并且看起来来自子进程的所有调用都将类似地失败。

有人知道为什么会发生这种事吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-29 16:48:28

这段代码运行is available on all POSIX-conforming systemsls command

您正在使用Microsoft Windows。默认情况下,Microsoft Windows不符合POSIX。例如,没有ls二进制文件。因此,子进程无法找到文件ls,因此会发出FileNotFoundError

您可以安装Microsoft's Bash on Windows,它将为您提供ls。

但是,列出目录的pythonic式的、更可移植的方法不是首先使用子进程,而是使用内置的os.listdir

代码语言:javascript
复制
import os
print(os.listdir('../input'))
票数 11
EN

Stack Overflow用户

发布于 2018-08-02 02:59:48

我碰巧也有同样的问题。使用Phihag提供的以下代码在Windows上的Jupiter Notebook上运行效果很好。谢谢。

代码语言:javascript
复制
    import os
    print(os.listdir('../input'))
票数 0
EN

Stack Overflow用户

发布于 2017-03-29 16:48:21

尝试通过添加cwd参数来指定工作目录,这应该是可行的

代码语言:javascript
复制
import os, subprocess
cwd = os.getcwd()
proc = subprocess.Popen(["ls" ,"../input"], cwd=cwd, stdout=subprocess.PIPE)
output = proc.stdout.read().decode("utf8")
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43088388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档