【问题标题】:I want files ran from main python file to run from their own directory我希望从主 python 文件运行的文件从它们自己的目录运行
【发布时间】:2017-10-28 22:12:32
【问题描述】:

例子:

我的主文件 main.py 包含以下代码:

import os
os.popen("start folder/subfile.py")

然后我有我的另一个文件,subfile.py,代码如下:

file = open("test.txt", "w")
file.close()

我希望我的 subfile.py 在它自己的文件夹中创建 test.txt 文件,但它在 main.py 的文件夹中创建它。

所以我的问题是,如何让 subfile.py 从它自己的文件夹运行,即使它是从 main.py 开始的

main.py 文件夹:C:/users/user/Desktop

subfile.py 文件夹:C:/users/user/Desktop/folder

【问题讨论】:

  • 产生一个新进程而不是把你的第二个py文件作为一个模块导入并直接调用它的函数的目的是什么?
  • 一般来说工作目录不会是main.py的目录。它是父进程设置为工作目录的任何内容,任何正确编写的程序都不应依赖初始工作目录来查找其任何私有资源,例如查找 subfile.py 脚本。另外,不要使用os.popen。没有理由通过 shell 运行此命令。使用subprocess.Popen
  • @Lojas 为什么要删除带有 main.py 的文件夹?
  • @Code-Apprentice 因为在我的实际情况下,main.py在文件夹中,subfile.py在文件夹外,这样解释更容易。

标签: python windows python-3.x operating-system


【解决方案1】:

subfile.py中,将工作目录(os.chdir)更改为包含subfile.py文件的目录:

import os
os.chdir(os.path.dirname(__file__))

【讨论】:

    【解决方案2】:

    您可以使用内置的子流程:

    subprocess.Popen(sys.executable + ' subfile.py', cwd=os.path.dirname(__file__) + '/folder')
    

    【讨论】:

    • 主脚本可以在任何工作目录下运行。您绝对必须通过__file__ 获取 main.py 的路径。另外,如果没有安装 py.exe 启动器怎么办?通过sys.executable 运行它更安全。
    【解决方案3】:

    试试这个:

    import os
    import inspect
    
    your_current_folder_path = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
    your_current_file_path = os.path.join(your_current_folder_path, "test.txt")
    
    print(your_current_folder_path)
    print(your_current_file_path)
    
    
    with open(your_current_file_path, "w") as make_file:
        make_file.write("")
    
    print("Done.")
    

    另一种方式:您可以通过 os.chdir("your_folder_directory") 函数更改您的工作目录。

    os.chdir(r"C:/users/user/Desktop/folder")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-24
      • 2021-11-27
      • 2021-06-04
      • 2020-04-26
      相关资源
      最近更新 更多