如果我创建如下文件:
import os
print os.getlogin()
并用cron运行它,我得到了一个异常
print os.getlogin()
OSError: [Errno 22] Invalid argument
如果我在shell中手动运行它--它可以工作。
问题是,commit()中的GitPython 0.3.1使用了这个函数,我需要使用它。
有什么变通方法吗?
我已经在Ubuntu10.10/python2.6.6和Debian5.0.6/python2.5.2上进行了测试。
发布于 2010-12-09 23:04:24
在os.getlogin()
docs中:“返回登录到进程的控制终端的用户。”从cron
运行时,您的脚本没有控制终端。文档继续建议:“在大多数情况下,使用环境变量LOGNAME
来找出用户是谁,或者使用pwd.getpwuid(os.getuid())[0]
来获取当前有效用户id的登录名更有用。”
由于您不想修改GitPython,因此可以编写一个执行此操作的脚本:
import os, pwd
os.getlogin = lambda: pwd.getpwuid(os.getuid())[0]
import git
# do whatever you need to do with GitPython here
不过,我建议向GitPython提交一个bug (或者更好,提交一个补丁)。
发布于 2010-12-09 23:19:28
这里有一个未经测试的可能可行的变通方法:os.getlogin()
调用C库中的getlogin()
,后者在对应于当前进程的utmp记录中查找登录名。由于没有cron的utmp记录,您可以尝试使用以下命令创建一个
sessreg -a <logname> ; do_stuff ; sessreg -d <logname>
在您的crontab中。也许您必须对sessreg
选项进行一些调整。如果您尝试过,请让我知道这是否真的有效:)
https://stackoverflow.com/questions/4399617
复制相似问题