当前位置: 首页 > 面试题库 >

子流程更改目录

闻法
2023-03-14
问题内容

我想在子目录/超级目录中执行脚本(我需要先在此子目录/超级目录中)。我无法subprocess进入子目录:

tducin@localhost:~/Projekty/tests/ve$ python
Python 2.7.4 (default, Sep 26 2013, 03:20:26) 
[GCC 4.7.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> import os
>>> os.getcwd()
'/home/tducin/Projekty/tests/ve'
>>> subprocess.call(['cd ..'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/subprocess.py", line 524, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1308, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

Python抛出OSError,我不知道为什么。无论是尝试进入现有的子目录还是进入一个目录(如上所述)都没有关系-我总是会遇到相同的错误。


问题答案:

您的代码尝试执行的操作是调用名为的程序cd ..。您想要的是称为的命令cd

但是cd是外壳内部的。所以你只能称它为

subprocess.call('cd ..', shell=True) # pointless code! See text below.

但这是没有意义的。
由于没有进程可以更改另一个进程的工作目录(同样,至少在类似UNIX的操作系统上,但在Windows上也是如此),因此此调用将使子Shell更改其目录并立即退出。

您可以通过使用命名参数来实现所需的功能os.chdir(),该subprocess参数cwd可以在执行子流程之前立即更改工作目录。

例如,要ls在根目录中执行,您可以

wd = os.getcwd()
os.chdir("/")
subprocess.Popen("ls")
os.chdir(wd)

或简单地

subprocess.Popen("ls", cwd="/")


 类似资料:
  • 问题内容: 是否可以更改流程父级? 例如:父母A有孩子B,我可以使父母B是不杀死A的Init进程吗? 问题答案: 并非来自流程B的外部。 在流程B内部,您可以调用fork来复制您的流程,然后让原始副本退出。发生这种情况时,新副本B2将不是A的子级,其父级将被设置为1(初始化过程)。

  • 问题内容: 我在目录C:/ java / newfolder中做了一些检测更改的代码,它工作正常。我在下面给出。 现在我只看目录。但是我只需要看所有子目录。 对于前: 我在子目录上方给出了示例 c:/ java / newfolder / * .. 我需要观看所有子目录给我一些解决方案吗? 问题答案: 我对API 并不熟悉,因此请仔细阅读以下内容。 您正在注册一个要监视的目录,每当其直接后代之一被

  • 问题内容: 是否可以更改当前过程的环境变量? 在Python脚本更具体地说我想改变,这样在模块“X”依赖于一些进口,从我给出的路径采取的LD_LIBRARY_PATH 还有其他方法可以动态更改从库加载位置的路径吗? 编辑 :我想我需要提及的是,我已经尝试过类似os.environ [“ LD_LIBRARY_PATH”] = mypath os.putenv(’LD_LIBRARY_PATH’,m

  • 在Apache 2.4中更改根目录时遇到问题。9在Mac OS X优胜美地10.10上。2.我正在使用本教程:http://coolestguidesontheplanet.com/forbidden-403-you-dont-have-permission-to-access-username-on-this-server/ 当我导航到http://localhost/~Owner/,我得到40

  • 我的结构。jsp文件是:WEB-INF/jsp/。。。。;但我有索引。WEB-INF/index中的jsp文件。jsp文件夹。此外,我在WEB-INF/目录中还有其他类型的文件,我想移动索引。将jsp放入如下文件夹:WEB-INF/jsp/index。jsp。那么,我是否可以(在我的conf文件中,而不是在tomcat设置中)更改我的索引页在另一个文件夹中?我试着用这个: 和许多变种的欢迎文件列表

  • 科特林: 这让我对一些后期编译任务感到头疼。如何配置Kotlin以将类文件生成到不同的目录中?