使用python27.dll运行python脚本

使用python27.dll运行python脚本

问题描述:

是否可以使用python27.dll从CLI运行.py脚本? 我试过这个:使用python27.dll运行python脚本

rundll32.exe python27.dll,PyRun_SimpleString "import myScript.py" 

但似乎不工作。

情况是,我可以安装所需的所有python模块,但没有可执行文件,所以我无法安装完整的Python。

+0

你可以转换成可执行文件,那么你不需要安装完整的python设置执行。如果你使用窗口转换成.exe格式。检查视频==> https://www.youtube.com/watch?v=vPzc4OelblQ – rohitjoshi9023

你不能这样做。为什么?

的Windows包含一个名为rundll32.exe,使您可以调用使用以下语法从32位DLL导出的函数命令行实用程序:

RUNDLL.EXE <dllname>,<entrypoint> <optional arguments> 

但是,根据MSDN:

Rundll32的程序不允许你从任何DLL调用任何导出函数

[..]

这些程序只允许你从一个DLL中调用函数,这些函数被明确写入以便被它们调用。

dll必须导出以下原型来支持它:

void CALLBACK EntryPoint(HWND hwnd, HINSTANCE hinst, 
         LPSTR lpszCmdLine, int nCmdShow); 

由于python.dll不导出这样的入口点,你必须写在加载DLL的C/C++的包装应用并使用它,例如(这里是从这样的应用程序的一个片段):

// load the Python DLL 
#ifdef _DEBUG 
LPCWSTR pDllName = L"python27_d.dll" ; 
#else 
LPCWSTR pDllName = L"python27.dll" ; 
#endif 

HMODULE hModule = LoadLibrary(pDllName) ; 
assert(hModule != NULL) ; 

// locate the Py_InitializeEx() function 
FARPROC pInitializeExFn = GetProcAddress(hModule , "Py_InitializeEx") ; 
assert(pInitializeExFn != NULL) ; 

// call Py_InitializeEx() 
typedef void (*PINITIALIZEEXFN)(int) ; 
((PINITIALIZEEXFN)pInitializeExFn)(0) ; 

FILE* fp ; 
errno_t rc = fopen_s(&fp , pFilename , "r") ; 
assert(rc == 0 && fp != NULL) ; 

[..] // go on to load PyRun_SimpleFile 
if (0 == PyRun_SimpleFile(fp , pFilename) 
    printf("Successfully executed script %s!\n", pFilename); 

产地:Awasu.com first和10教程

+0

>:我不这么认为,rundll32.exe完成了为此,我想。 –

+0

@ luca.vercelli,我现在看到我的解释不够清楚,所以我阐述了 –