2016-07-27 129 views

回答

0

使用ShellExecuteEx函数。

BOOL ShellExecuteEx(
_Inout_ SHELLEXECUTEINFO *pExecInfo 
); 

这是pExecInfo: *** n显示 - 标志指定的应用程序是如何显示,当它打开时

typedef struct _SHELLEXECUTEINFO { 
    DWORD  cbSize; 
    ULONG  fMask; 
    HWND  hwnd; 
    LPCTSTR lpVerb; 
    LPCTSTR lpFile; 
    LPCTSTR lpParameters; 
    LPCTSTR lpDirectory; 
    int  nShow;/*=0 if you don't want the console window to appear*/ 
    HINSTANCE hInstApp; 
    LPVOID lpIDList; 
    LPCTSTR lpClass; 
    HKEY  hkeyClass; 
    DWORD  dwHotKey; 
    union { 
    HANDLE hIcon; 
    HANDLE hMonitor; 
    } DUMMYUNIONNAME; 
    HANDLE hProcess; 
} SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO; 
3

尝试使用Python的pythonw.exe可执行文件来启动你的脚本。

在Windows操作系统,可执行文件是控制台应用程序python.exe与出w是一个控制台应用程序)的运行表示控制台窗口;另一方面,常规Windows应用程序不会产生黑色控制台窗口。

你可以找到关于这两个可执行文件的细节在这个古老的问题:pythonw.exe or python.exe?

以及有关Windows不同类型的应用程序在这里:Difference between Windows and Console application

+0

谢谢,现在我从C运行像巨蟒文件这个:system(“python.pyw”)。我应该如何执行它? – David

+1

@David,'system'使用cmd来运行程序,当您从非控制台程序运行非控制台程序时,该程序会短暂地闪烁控制台。如果你没有传递参数给脚本,你可以使用'os.startfile(“script.pyw”)'。但首先修复.pyw文件关联。 '[HKLM | HKCU] \ Software \ Classes \ .pyw'的默认值应该是'Python.NoConFile'。然后使用右键单击“打开方式”对话框选择始终使用Python for .pyw脚本。如果有多个Python条目,请全部尝试,直到它正常工作,但*不*“在此PC上查找另一个应用程序”。 – eryksun

-1

从另一个帖子此信息可以帮助:https://stackoverflow.com/a/30313091/6470259

  • python.exe是一个控制台(终端)应用程序在上启动CLI型脚本。 *除非从现有控制台窗口运行,否则将打开一个新的控制台窗口,其中 python.exe。 * 标准流 sys.stdinsys.stdoutsys.stderr连接到 控制台窗口。 *执行是同步

    • 如果创建一个新的控制台窗口,它一直开到脚本终止。
    • 从现有控制台窗口调用时,提示将被阻止,直到脚本终止。
  • pythonw.exe是推出一个GUI应用程序GUI /无UI不惜一切脚本。 * NO控制台窗口已打开。 *执行是 异步

    • 当从一个控制台窗口调用脚本仅仅是推出和提示立即返回,脚本是否仍在运行与否。 * 标准流sys.stdin, sys.stdoutsys.stderr不可用
    • 注意除非你采取额外的步骤,这有可能意想不到的副作用
      • 未处理的异常导致脚本中止默默
      • 在Python 2.x中,简单地尝试使用print()会导致发生这种情况(在3.x中,print()根本没有效果)。
        • 防止从脚本,并了解更多内,看到 矿this answer
        • 特设,可以使用输出重定向谢谢,@handle。pythonw.exe yourScript.pyw 1>stdout.txt 2>stderr.txt(来自PowerShell:cmd /c pythonw.exe yourScript.pyw 1>stdout.txt 2>stderr.txt)捕获 标准输出和标准输出文件。如果您确信使用的 print()是你的脚本 pythonw.exe静静地失败的唯一原因,而你不感兴趣的标准输出输出,使用 @手柄的命令,从评论:pythonw.exe yourScript.pyw 1>NUL 2>&1
          买者:该输出重定向技术貌似不是调用时工作*.pyw脚本直接(而不是 将脚本文件路径传递给pythonw.exe)。 如果您知道为什么和/或它是否适合您,请告诉我是否 。

您可以将可执行文件的通过 默认运行脚本控制 - 通过选择 正确的文件扩展名 - 例如从资源管理器打开时,如:

  • *.py文件默认关联(引用)与python.exe
  • *.pyw文件默认关联(引用)与pythonw.exe
+0

无耻抄袭[这里](http://stackoverflow.com/a/30313091/1222951)。 –

0

在所有的Python安装,因为2.5(甚至更早),如果安装已处理得当,.py文件关联到python.exe.pyw文件关联到pythonw.exe

如果关联已被篡改,或覆盖特定用户,这可能是不同的。

运行在一个cmd下面的命令:

ftype | find "pythonw" 
assoc | find ".pyw" 

我得到:

Python.NoConFile="D:\Program Files\Python27\pythonw.exe" "%1" %* 
.pyw=Python.NoConFile 

如果你没有,你可以采取一些措施来解决这个问题:

  1. 重新安装/修复python安装(运行安装程序,它会建议修复安装)
  2. 如果您不是机器的管理员,则可以将.pyw文件与pythonw.exe关联。与小问题,你必须修改注册表项之后增加额外的参数或在您.pyw文件拖放参数不会考虑到这一点(它很少使用,但仍然)

    [HKEY_CLASSES_ROOT\Python.NoConFile\shell\open\command] @="\"L:\\Portable_Python_2.7.3.1\\App\\pythonw.exe\" \"%1\" %*"

+0

最好修改'HKLM \ Software \ Classes'或'HKCU \ Software \ Classes'。 HKCR虚拟键是这两棵树的合并视图,因此修改它的结果取决于当前定义的键。合并使用'HKCR'的.reg文件可能会修改'HKCU'中的子密钥(如果存在),否则将修改'HKLM'中的子密钥(如果存在),否则在'HKLM'中创建子密钥。因此,密钥及其子密钥最终可能会部分为当前用户定义,并部分为本地计算机定义。 – eryksun

+0

请注意,cmd的'assoc'和'ftype'命令仅显示和修改'HKLM \ Software \ Classes'键,这些键仅为用户在资源管理器中的选择定义了一种可能性。还有其他地方可以定义文件关联,例如'[HKCU | HKLM] \ Software \ Classes \ Applications'以及'[HKCU | HKLM] \ Software \ Classes \ SystemFileAssociations'下的默认值。用户当前的选择位于HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts中,但只能使用GUI对其进行修改。 – eryksun

相关问题