为什么代码在 os.system 命令后停止工作?

问题描述 投票:0回答:1

我有这个代码:

import os
import threading

def push_repository():
    try:
       os.system('git add *')
       os.system('git commit -m "Automated commit"')
       os.system('git push')
    except Exception as e:
       print(e)

def commit_and_push_git_folders(path):

 for root, dirs, files in os.walk(path):
     for dir in dirs:
         if dir == '.git':
             print(os.path.join(root, dir))
             os.chdir(os.path.join(root, dir, '..'))
             t = threading.Thread(target=push_repository)
             t.start()

commit_and_push_git_folders('.')

一切正常,除了它只进入给定路径的第一个文件夹而不是停止工作。
如果我在

os.system
函数中删除
push_repository
的命令并将其更改为
print(os.path.join(root, dir))
一切正常,并且它进入每个目录。

我已经尝试使用线程,不使用线程,使用子进程并且在推送第一个存储库时它仍然关闭

当前输出是这样的:

.\ANN-visualizer\.git

On branch main

Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

Everything up-to-date

但是我还有几个文件夹需要推送.git文件夹。

python multithreading subprocess python-multithreading os.system
1个回答
0
投票

正如我上面提到的,我怀疑“当前目录”是一个全局变量而不是每个线程。

你可以试试:

def push_repository(directory):
    try:
       os.system(f'git -C {directory} add *')
       os.system(f'git -C {directory} commit -m "Automated commit"')
       os.system(f'git -C {directory} push')
    except Exception as e:
       print(e)

def commit_and_push_git_folders(path):

 for root, dirs, files in os.walk(path):
     for dir in dirs:
         if dir == '.git':
             print(os.path.join(root, dir))
             directory = os.path.join(root, dir, '..'))
             t = threading.Thread(target=push_repository, args=(directory,))
             t.start()
© www.soinside.com 2019 - 2024. All rights reserved.