os.system()调用exe命令时候,如何隐藏命令窗口(cmd)。。

Ace_wgk 2011-09-14 09:10:04
如题,因为在python2.7中用os.system调用一个matlab打包后的exe文件。我想隐藏os.system调用时候的命令行窗口(cmd黑框),但是不知道怎么办。我用了一下这个方法:os.system('start /B D:\DBS\OPE\OriginalPicExe.exe'),但是黑框还是会有。(因为运行调用的exe程序时候需要时间,所以就会有黑框长时间等待的漏端,很不好看,有办法在继续使用os.syste m的情况下隐藏它么)。
我从google上搜到了一些方法,但没有明确的在os.system下隐藏黑框的解决办法。有的提议是使用下列两种方法:
ShellExecute(NULL, NULL,"xxx.exe", NULL, NULL, SW_HIDE);
WinExec("xxx.exe", SW_HIDE);
但上面两种方法好像都得安装对应于py2.7的win32api,一者我没有搜到py2.7对应的win32api。二者我即使使用py2.5和对应的win32api也担心会在xp系统上运行不了我开发的程序。因为我用的是win7......
我的意思很明确,希望在使用os.system的基础上解决隐藏黑框的问题...我用的是python27开发的程序...
请教各位了!
...全文
4528 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ww7472242 2011-12-02
  • 打赏
  • 举报
回复
请教下楼主,最后有搞定吗? 是如何搞定的? 我也被这个问题困扰着。
赵4老师 2011-09-16
  • 打赏
  • 举报
回复
仅供参考
#include <windows.h>
#include <stdio.h>
char cmdstr[256];
int i;
int YN(int k) {
FILE *f;
char fn[40];
char ln[80];
int yn=0;

sprintf(fn,"d:\\ping%d.txt",k);
f=fopen(fn,"r");
if (NULL!=f) {
fgets(ln,80,f);
fgets(ln,80,f);
fgets(ln,80,f);
if (1==fscanf(f,"Re%c",&yn)) yn='q'-yn;
fclose(f);
unlink(fn);
}
return yn;
}
void main() {
for (i=115;i<130;i++) {
sprintf(cmdstr,"cmd /c ping 192.168.2.%d -n 1 -w 1000 >d:\\ping%d.txt",i,i);
WinExec(cmdstr,SW_HIDE);
}
Sleep(3000);
for (i=115;i<130;i++) {
printf("%d 192.168.2.%d\n",YN(i),i);
}
}
//1 192.168.2.115
//0 192.168.2.116
//0 192.168.2.117
//0 192.168.2.118
//1 192.168.2.119
//0 192.168.2.120
//0 192.168.2.121
//0 192.168.2.122
//1 192.168.2.123
//0 192.168.2.124
//0 192.168.2.125
//1 192.168.2.126
//0 192.168.2.127
//1 192.168.2.128
//0 192.168.2.129
Ace_wgk 2011-09-16
  • 打赏
  • 举报
回复
我在查阅资料后发现os.system确实不能隐藏窗口,我便用了subprocess.call()这个函数代替,但是同样会出现命令行的黑框窗口,谁有什么好办法么?用os.system()和subprocess.call来隐藏窗口。。
Ace_wgk 2011-09-16
  • 打赏
  • 举报
回复
您好,谢谢您的回复,十分感激!我是python下开发的软件,希望您能看看能不能帮忙:
我在查阅资料后发现os.system确实不能隐藏窗口,我便用了subprocess.call()这个函数代替,但是同样会出现命令行的黑框窗口,谁有什么好办法么?用os.system()和subprocess.call来隐藏窗口。。
[Quote=引用 7 楼 zhao4zhong1 的回复:]
仅供参考

C/C++ code
#include <windows.h>
#include <stdio.h>
char cmdstr[256];
int i;
int YN(int k) {
FILE *f;
char fn[40];
char ln[80];
int yn=0;

sprintf(fn,"d:\\ping%d.……
[/Quote]
Ace_wgk 2011-09-15
  • 打赏
  • 举报
回复
也就是说只有调用os.system函数便不可避免地会弹出命令提示符的黑框了?[Quote=引用 2 楼 luciferisnotsatan 的回复:]
已C/C++的system函数来说,没有你要的功能。必须使用WinExec这些函数才行
[/Quote]
Ace_wgk 2011-09-15
  • 打赏
  • 举报
回复
那您的意思是,用不用api都不会影响软件在windows系统的不同机器上的可移植性了?
请问您有没有对应的py2.7的win32api呢?我没有找到下载资源啊。。[Quote=引用 3 楼 bokutake 的回复:]
这两个函数从95甚至16位系统就已经有了,python又是动态语言,所以只要找到api封装就肯定能用。
[/Quote]
辰岡墨竹 2011-09-14
  • 打赏
  • 举报
回复
这两个函数从95甚至16位系统就已经有了,python又是动态语言,所以只要找到api封装就肯定能用。
luciferisnotsatan 2011-09-14
  • 打赏
  • 举报
回复
已C/C++的system函数来说,没有你要的功能。必须使用WinExec这些函数才行
luciferisnotsatan 2011-09-14
  • 打赏
  • 举报
回复
python的来这问??py2.5里应该也有win32api的封装。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧