首先,我知道有更好的方法可以做到这一点。我试图在与各种UNIX命令交互时学习subprocess.Popen()的最基本行为。我对目录导航做错了,我不知道它是什么。我将iPython作为我的REPL运行,因此ls命令显示当前工作目录中的文件。
有人请告诉我我做错了什么!
In [61]: newtree_dirs
Out[61]:
['10dir',
'1dir',
'2dir',
'3dir',
'4dir',
'5dir',
'6dir',
'7dir',
'8dir',
'9dir']
In [62]: ls
10dir/ 1dir/ 2dir/ 3dir/ 4dir/ 5dir/ 6dir/ 7dir/ 8dir/ 9dir/
In [63]: for folder in newtree_dirs:
...: p1 = sub.Popen(['cd', './{}'.format(folder)])
...: p1.communicate()
...: foo = (i for i in xrange(10))
...: for num in foo:
...: p2 = sub.Popen(['touch', '{}file'.format(num)])
...: p2.communicate()
...: p3 = sub.Popen(['cd', '..'])
...: p3.communicate()
...:
...:
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
<ipython-input-63-bb6e77faf97b> in <module>()
1 for folder in newtree_dirs:
----> 2 p1 = sub.Popen(['cd', u'./{}'.format(folder)])
3 p1.communicate()
4 bar = (i for i in xrange(10))
5 for num in bar:
在该异常之后,进一步的异常会进入子进程模块对丢失目录的错误处理。我的cwd中的目录名称是相同的,我不知道发生了什么。
答案 0 :(得分:2)
cd
引发&#34; OSError:[Errno 2]没有这样的文件或目录&#34;因为$PATH
(可能在您的计算机上)没有名为cd
的文件。 cd
不是一个独立的可执行文件,它是一个内置的shell。如果它是一个独立的可执行文件,它将无法更改shell(或您的脚本)的当前工作目录,因为子进程无法直接更改它的父进程和&#39; #39;当前工作目录,环境变量,用户ID等。
更多信息:
builtin vs normal command
注意:除了shell内置cd
之外,技术上要成为POSIX兼容,操作系统必须提供一个独立的可执行文件func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
来改变它自己的当前目录和返回,但许多Linux发行版不包含它。资料来源:Why is cd not a program?