栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

subprocess.Popen简单代码不允许我执行cd(更改目录)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

subprocess.Popen简单代码不允许我执行cd(更改目录)

>>> Popen('cd ~', shell=True, stdout=PIPE).communicate()(b'', None)

没有

shell=True
(模拟外壳程序)

>>> Popen(['cd', '~'], stdout=PIPE).communicate()Traceback (most recent call last):  File "<stdin>", line 1, in <module>  File "/usr/lib/python3.4/subprocess.py", line 858, in __init__    restore_signals, start_new_session)  File "/usr/lib/python3.4/subprocess.py", line 1456, in _execute_child    raise child_exception_type(errno_num, err_msg)FileNotFoundError: [Errno 2] No such file or directory: 'cd'>>>

除非通过以下方式进行更改,否则无法更改目录:

import osos.chdir(os.path.abspath(os.path.expanduser('~')))

因此,问题不在于路径

~
不存在,而是
cd
在Python的仿真终端中作为选项不存在。直接传递到实际的外壳即可
cd
。但是请注意,
shell=True
是有风险的,从来没有,除非你需要..用它
所以使用
os.chdir
来代替。

工作方案:

import os, subprocessos.chdir(os.path.abspath('/tmp/'))print(subprocess.Popen(['ls', '-lah'], stdout=subprocess.PIPE).communicate()[0].depre('utf-8'))

导致:

[torxed@archie ~]$ pythonPython 3.4.1 (default, May 19 2014, 17:23:49)>>> import os, subprocess>>> os.chdir(os.path.abspath('/tmp/'))>>> print(subprocess.Popen(['ls', '-lah'], stdout=subprocess.PIPE).communicate()[0].depre('utf-8'))total 12Kdrwxrwxrwt  9 root   root   220 Jun 11 12:08 .drwxr-xr-x 19 root   root  4.0K May 28 08:03 ..drwxrwxrwt  2 root   root    40 Jun 11 09:30 .font-unixdrwx------  2 torxed users   60 Jun 11 09:33 gpg-LBLcdddrwxrwxrwt  2 root   root    40 Jun 11 09:30 .ICE-unixdrwx------  2 torxed users   80 Jun 11 09:34 .org.chromium.Chromium.LEqfXB-rw-------  1 torxed users  153 Jun 11 09:34 serverauth.EHWB0LqCv6drwxrwxrwt  2 root   root    40 Jun 11 09:30 .Test-unix-r--r--r--  1 root   users   11 Jun 11 09:34 .X0-lockdrwxrwxrwt  2 root   root    60 Jun 11 09:34 .X11-unixdrwxrwxrwt  2 root   root    40 Jun 11 09:30 .XIM-unix>>>

请注意,我在启动shell

~
并将其
os.chdir
更改为tmp,并实际上得到了我的tmp目录内容。

Shell和命令的说明:

shell命令是内置在shell中的命令,而常规的旧命令是您可以在下找到的命令

/bin
,例如:

[torxed@archie ~]$ ls /bin2to3 2to3-2.77z   7za...

我实际上可以执行7z命令:

>>> from subprocess import *>>> Popen(['7z'], stdout=PIPE).communicate()(b'n7-Zip [64] 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18np7zip Version 9.20 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,8 CPUs)n

例如,虽然

cd
是内置的shell命令,但是您不会在下面找到它,
/bin
但是在大多数“终端”(使用shell)中仍然可以使用,因为它(如前所述)已内置在您通常看到的shell中。

但是由于Python将 模拟外壳程序
,因此只有一组内置且有效的命令,

cd
作为其中一个命令,您可以
os.chdir(...)
执行完全相同的功能并影响整个程序。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/636932.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号