Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要使用python子流程模块浏览Linux目录的帮助吗_Python_Linux_Shell - Fatal编程技术网

需要使用python子流程模块浏览Linux目录的帮助吗

需要使用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

首先,我知道有更好的方法可以做到这一点。我试图学习subprocess.Popen()与各种UNIX命令交互时的最基本行为。我的目录导航有问题,我不知道它是什么。我将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:
[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内置的功能。