需要使用python子流程模块浏览Linux目录的帮助吗
首先,我知道有更好的方法可以做到这一点。我试图学习subprocess.Popen()与各种UNIX命令交互时的最基本行为。我的目录导航有问题,我不知道它是什么。我将iPython作为REPL运行,因此ls命令显示当前工作目录中的文件 有人请告诉我我做错了什么需要使用python子流程模块浏览Linux目录的帮助吗,python,linux,shell,Python,Linux,Shell,首先,我知道有更好的方法可以做到这一点。我试图学习subprocess.Popen()与各种UNIX命令交互时的最基本行为。我的目录导航有问题,我不知道它是什么。我将iPython作为REPL运行,因此ls命令显示当前工作目录中的文件 有人请告诉我我做错了什么 In [61]: newtree_dirs Out[61]: ['10dir', '1dir', '2dir', '3dir', '4dir', '5dir', '6dir', '7dir', '8dir', '9dir
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:
[61]中的newtree\u dirs
出[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]:对于newtree_dirs中的文件夹:
…:p1=sub.Popen(['cd','./{}'。格式(文件夹)])
…:p1.交流()
…:foo=(x范围(10)中的i代表i)
…:对于foo中的num:
…:p2=sub.Popen(['touch','{}file'.format(num)])
…:p2.交流()
…:p3=sub.Popen(['cd','..']
…:p3.沟通()
...:
...:
---------------------------------------------------------------------------
OSError回溯(最近一次调用上次)
在()
1对于newtree_目录中的文件夹:
---->2 p1=sub.Popen(['cd',u./{}'。格式(文件夹)])
3.交流
4巴=(X范围(10)中的i代表i)
5对于条形图中的数字:
在该异常之后,进一步的异常会下降到子流程模块对丢失目录的错误处理中。我的cwd中的目录名是相同的,我不知道发生了什么 sub.Popen(['cd','./10dir')
引发“OSError:[Errno 2]没有这样的文件或目录”,因为在您的$PATH
上(可能在您的计算机上)没有名为cd
的文件.cd
不是独立的可执行文件,它是一个shell内置文件。如果它是独立的可执行文件,它将无法更改shell(或脚本)的当前工作目录,因为子进程不能直接更改其父进程的当前工作目录、环境变量、用户id等
更多信息:注意:从技术上讲,除了shell内置的
cd
之外,操作系统还必须提供一个独立的可执行文件cd
,它可以更改自己的当前目录并返回,但许多Linux发行版不包括它。来源:错误消息到底是什么?请尝试硬编码一个Popen(cd)命令并查看其是否自行工作,而不是循环。您遇到的错误是否如下:“OSError:[Errno 2]没有这样的文件或目录”?因此,我尝试使用更多的内置程序来执行此操作,从这些测试中可以看出您是对的。subprocess.Popen(['pwd')再次出现“没有这样的文件或目录”异常。看起来我必须用一些操作系统模块函数来扩充子流程,以模拟shell内置的功能。