Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python os.getlogin问题_Python_Gitpython - Fatal编程技术网

Python os.getlogin问题

Python os.getlogin问题,python,gitpython,Python,Gitpython,如果我创建一个文件,如: import os print os.getlogin() 用cron运行它,我得到一个异常 print os.getlogin() OSError: [Errno 22] Invalid argument 如果我在shell中手动运行它,它就会工作 问题是,提交()中的GitPython 0.3.1使用了这个函数,我需要使用它 有什么解决办法吗 我已经在Ubuntu10.10/python2.6.6和Debian5.0.6/python2.5.2上测试了它。来自o

如果我创建一个文件,如:

import os
print os.getlogin()
用cron运行它,我得到一个异常

print os.getlogin()
OSError: [Errno 22] Invalid argument
如果我在shell中手动运行它,它就会工作

问题是,提交()中的GitPython 0.3.1使用了这个函数,我需要使用它

有什么解决办法吗

我已经在Ubuntu10.10/python2.6.6和Debian5.0.6/python2.5.2上测试了它。

来自
os.getlogin()
:“返回用户登录到进程的控制终端。”从
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(或者更好的是提交一个补丁)。

这里有一个未经测试的猜测,关于可能有效的解决方法:
os.getlogin()
调用C库中的
getlogin()
,然后在utmp记录中查找与当前进程对应的登录名。因为cron没有utmp记录,所以可以尝试使用

sessreg -a <logname> ; do_stuff ; sessreg -d <logname>
sessreg-a;做事;sessreg-d

在你的crontab里。也许你不得不在
sessreg
选项中闲逛。如果您尝试过,请告诉我这是否真的有效:)

是的,问题是关于解决方法)手动编辑外部软件包是我最不想做的事情)啊,好的。我添加了一个建议,通过对
os
模块进行猴子补丁来解决这个问题。使用
pwd
模块的一个更简单的替代方法可能是我最近在docker环境中遇到了同样的问题,因为我无法更改源代码,这个解决方法帮助我解决了这个问题