python中什么是特定于线程的os.chdir和mkdir?

hak*_*ura 8 python multithreading operating-system

我有几个线程,每个线程都在更改工作目录,偶尔在特定的工作目录中创建新的,在这些目录中复制/移动文件等.想想例如:

def thread1:
  while True:
    os.chdir('dir')
    os.mkdir('newdir')
    os.system('mv *.png newdir/')
    do something

def thread2:
  while True:
    os.chdir('another-dir')
    os.mkdir('another-newdir')
    os.system('mv *.png another-newdir/')
    do something
Run Code Online (Sandbox Code Playgroud)

我已经读过chdir,mkdir函数不是特定于线程而是全局的.有什么方法可以实现这个目标?我可以尝试使用绝对路径,但这是最好的解决方案吗?

Bak*_*riu 8

工作目录是进程的信息,因此所有线程共享相同的工作目录.你必须,如果你想使用多线程使用绝对路径的工作.

您可以使用该os.path模块轻松获得绝对路径.

您可以考虑的另一件事是使用python的标准库来执行复制而不是调用外部进程.

参见例如:


kxr*_*kxr 5

操作系统级别的当前工作目录通常是特定于进程的,而不是针对每个线程的。(Linux:请参阅取消共享

Python 内部文件操作大多可以重写以使用 aos.path.join()并避免chdir().

如果这是不可能的,例如对于不可更改的代码、RExec沙箱执行等,那么您可以提供虚拟os模块、open函数等,在幕后进行路径调整。

对于调用外部程序,您可以cwd=...在 subprocess.Popen() 调用和朋友中提供参数。