2015-06-16 27 views
1

我想通过子过程调用鹈鹕进行自动化博客发布,但是当我在shell中尝试which pelican并将其打开时。我发现这个是用户从shell执行的pelican可执行脚本?

#!/usr/bin/python 
# EASY-INSTALL-ENTRY-SCRIPT: 'pelican==3.5.0','console_scripts','pelican' 
__requires__ = 'pelican==3.5.0' 
import sys 
from pkg_resources import load_entry_point 

sys.exit(
    load_entry_point('pelican==3.5.0', 'console_scripts', 'pelican')() 
) 

,而我期待看到主函数的调用被调用时,有人通过从外壳到鹈鹕的说法。(我不是在谈论pelican-quickstart

我试图寻找到鹈鹕项目我认为它的主要功能__init__.py,但通常我会有一个可执行的包装,调用这个主要功能,所以任何人都可以重定向到哪个函数上面的代码传递参数传递给用户?

+0

这些包装是由产生的easy_install如你所期望的。然而,这是一个实现细节 - 为什么你需要知道这个通过'subprocess'模块调用它?如果你想直接调用'main()'函数*,不需要通过包装器,这是更相关的信息。 –

回答

1

pelican's setup.py

entry_points = { 
    'console_scripts': [ 
     'pelican = pelican:main', 
     'pelican-import = pelican.tools.pelican_import:main', 
     'pelican-quickstart = pelican.tools.pelican_quickstart:main', 
     'pelican-themes = pelican.tools.pelican_themes:main' 
    ] 
} 

因此,入口点pelican命令是pelican模块中的main()功能;你也可以通过import pelican; pelican.main()来达到目的。 (同样,对于pelican-quickstartimport pelican.tools.pelican_quickstart; pelican.tools.pelican_quickstart.main())。

要查找的文件:

import pelican 
print pelican.__file__ 

...或者,以获得直接的main功能的手柄:

>>> from pkg_resources import load_entry_point 
>>> mainfunc = load_entry_point('pelican', 'console_scripts', 'pelican') 
>>> print mainfunc.__module__ 
'pelican' 
>>> mainfunc() 
WARNING: Feeds generated without SITEURL set properly may not be valid