создание выходных файлов в каждой папке после параллельного запуска - PullRequest
0 голосов
/ 22 февраля 2020

Я сделал код python, как показано ниже, для одновременного запуска нескольких exe-программ. Однако, если я использую этот код, выходные файлы создаются не в каждой папке, а в папке (Folder0), в которой находится файл python. Затем выходные файлы с одинаковым именем файла перекрываются в одной и той же папке, так что возникает ошибка. Как сделать, чтобы выходные файлы создавались в каждой папке, Папка1 и Папка2

python Файл расположен в "c: / Folder0", а программа 1 находится в "c: / Folder0 / Папка1 "exe программа 2 находится в" c: / Папка0 / Папка2 "


import threading 

def exe1(): 

    os.system( '"C:\\Users\\FOLDER0\\FOLDER1\\MLTPad1.exe"' )

def exe2(): 
    os.system('"C:\\Users\\FOLDER0\\FOLDER2\\MLTPad2.exe"')

if __name__ == "__main__": 
    # creating thread 
    t1 = threading.Thread(target=exe1, args=()) 
    t2 = threading.Thread(target=exe2, args=()) 

    # starting thread 1 
    t1.start() 
    # starting thread 2 
    t2.start() 

    # wait until thread 1 is completely executed 
    t1.join() 
    # wait until thread 2 is completely executed 
    t2.join() 

    # both threads completely executed 
    print("Done!")

1 Ответ

0 голосов
/ 23 февраля 2020

Существует такая вещь, как текущий рабочий каталог (он же CWD). Всякий раз, когда процесс создает файлы с относительными путями, эти пути относятся к cwd. Вы должны либо:

  • изменить каталог с помощью os.chdir() перед вызовом os.system(), так как cwd наследуется от родительского процесса, но cwd является широким для процесса, и вызов os.chdir() из одного потока будет также влияет на cwd другого и приводит к условию гонки

или

  • изменить каталог в команде оболочки, переданной на os.system():

    os.system('cd FOLDER1 && MLTPad1.exe')

...