Opi*_*oke 4 python git directory repository
我刚开始使用Python,我的第一个任务是编写一个脚本来确定运行它的目录是否是一个git存储库.一位同学建议使用以下代码:
#! /usr/bin/env python
from subprocess import Popen, PIPE, STDOUT
if Popen(("git", "branch"), stderr=STDOUT, stdout=PIPE).returncode != 0:
print("Nope!")
else:
print("Yup!")
Run Code Online (Sandbox Code Playgroud)
它应该打印输出,具体取决于控制台命令"git branch"的返回码.但是,该脚本在存储库中不起作用.
无论如何,对于这方面的任何建议,我将不胜感激.
作业还包括:
非常感谢!
小智 8
安装gitpython,例如pip install gitpython.
然后创建一个这样的函数:
import git
...
def is_git_repo(path):
try:
_ = git.Repo(path).git_dir
return True
except git.exc.InvalidGitRepositoryError:
return False
Run Code Online (Sandbox Code Playgroud)
关!Popen是一个更复杂的对象,它启动一个进程,但需要其他交互才能获取信息。在您的情况下,您需要调用wait(),以便Popen对象等待程序完成以获取返回代码。如果命令返回的信息太多而无法放入管道中,则还可能使程序挂起。尝试“调用”(调用将等待您)并将命令输出发送到位存储桶。
#! /usr/bin/env python
from subprocess import call, STDOUT
import os
if call(["git", "branch"], stderr=STDOUT, stdout=open(os.devnull, 'w')) != 0:
print("Nope!")
else:
print("Yup!")
Run Code Online (Sandbox Code Playgroud)
尽管tdelaney的答案是正确的,但我想发布一个更通用的函数,该函数可以快速复制粘贴到某人的脚本中:
该功能有两个要求:
import os
import subprocess
Run Code Online (Sandbox Code Playgroud)
而且功能很简单:
def is_git_directory(path = '.'):
return subprocess.call(['git', '-C', path, 'status'], stderr=subprocess.STDOUT, stdout = open(os.devnull, 'w')) == 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5694 次 |
| 最近记录: |