【问题标题】:Subprocess commands that need each other, special trouble with "cd" [duplicate]相互需要的子进程命令,“cd”特别麻烦[重复]
【发布时间】:2019-11-02 01:22:39
【问题描述】:

我想要一个程序,通过给定的参数,我正在使用 optpatse,更改工作目录并执行一些文件。

我试过了:

subprocess.check_call(['ls'], cwd="/home")

这行得通。但如果我这样做:

subprocess.call("cd", shell=True)
subprocess.call("ls", shell=True)

这不起作用,"ls" 向我显示当前 python 文件的工作位置。我知道这两个命令都能正确执行,但我需要在第一个命令的目录中执行第二个命令。

def followpath(path):

    subprocess.call("cd", shell=True)
    subprocess.call("ls", shell=True)

#The real thing I want to execute is:

    subprocess.call("cd", shell=True)
    subprocess.call(["cd", path])
    subprocess.call(["python3", somepyfile])

我还希望,在终端中运行脚本后,工作目录会更改为路径并执行 somepyfile。

【问题讨论】:

    标签: python linux terminal subprocess cd


    【解决方案1】:

    subprocess.call() 创建一个子进程,因此您的cd 将更改 child 进程的 CWD(然后立即退出)。您希望os.chdir(path) 更改程序的 CWD。​​p>

    【讨论】:

    • 我该如何处理子进程?现在是的,它改变了目录,但是当程序完成时返回到脚本文件的旧目录
    • 另外值得注意的是,无法更改运行脚本的 shell 的工作目录。脚本完成后,您运行它的 shell/终端将是它的启动位置。
    • 好的,所以我可以在想要的路径中打开一个新的shell并使用os模块执行文件?
    • @AjapolloTrukatila 更改 Python 解释器本身的目录,从而改变它启动的程序目录——所以os.chdir() 将 Python 解释器放在正确的目录中;然后当你启动一个外部程序时,它就在那个目录中。
    • @AndrewGelnar,请注意,在How to Answer 中,“回答正确提出的问题”部分,以及其中关于“已被询问和回答的问题”的要点之前很多次”。
    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多