如何在一个python程序中运行另外一个程序
很多时候,我们想要在p1.py程序中直接运行p2.py程序文件,或者想要在一个python程序中调用终端区的命令,比如直接运行一个程序就可以帮我安装很多个库,相当于在终端区运行:pipinstallmodule_name。下面提供两种方法。
第一种:模块法将另外一个python程序封装成一个我们想要运行的模块,在模块里面,将所有代码放到一个函数里面,在另外一个程序中导入运行就可以了。
实现过程:代码:
#p3.pyimportp4p4.print_three()#p4.pydefprint_three():print("helloworld")print("helloworld")print("helloworld")if__name__=="__main__":print_three()解释:将p4.py变成一个模块,运行模块就相当于直接运行程序。
第二种:管道方法Popen代码:
#p1.pyimportsysfromsubprocessimportPopen,PIPE,STDOUTp=Popen([sys.executable,"p2.py"],stdout=PIPE,stdin=PIPE,stderr=STDOUT)print("运行成功")#p2.pyprint("helloworld")print("helloworld")print("helloworld")运行结果:
上面的方法是直接运行程序,如果还想获得另外一个程序的运行结果,那么还需要加一些代码。
#p1.pyimportsysfromsubprocessimportPopen,PIPE,STDOUTp=Popen([sys.executable,"p2.py"],stdout=PIPE,stdin=PIPE,stderr=STDOUT)#查看交互的内容数据是怎样的print(p.communicate())#这行代码是将另外一个程序的输出结果获取到,content=p.communicate()[0]#原来是bytes类型的数据,需要将获取到的内容进行解码print(content.decode())print("运行成功")#p2.pyprint("helloworld")print("helloworld")print("helloworld")结果:
解释:如果直接运行其它程序还是非常简单的,除了导入库,只需要使用Popen就可以了,后面其它代码都是为了获取到输出的结果。
Python程序打包(Mac系统下)
最近使用pyqt5和python写了一个小界面,想要打包成exe/app程序,以便他人运行,接下来进入正题。
安装pyinstaller用pip安装就行
pip3installpyinstaller打包成app
pyinstaller-w-DRun_GUI.pyRun_GUI.py,你要打包的python文件。
打包完成后回出现build文件和dist文件,build文件没什么用,打开dist文件:Run_GUI就是刚刚要打包的python文件,双击就完了。
文件路径等下还没完,程序里面很多路文件径依赖怎么办?例如:我要读取candidate.fits和fig文件。父级目录按第一条设定就行
path=os.path.dirname(sys.argv[0])设置成相对路径。
然后把需要的文件扔到这里即可/Contents/MacOS即可
或者推荐另一个有效的方法,把相对路径往上移三层,这些文件便会在APP的同一目录产生。
VS生成的exe文件如何在其他电脑上运行
在VS编译器上编写的程序都会生成一个exe文件,有时候写了一个很装逼的程序想在别人电脑炫耀一下,奈何将这个exe文件拷贝过去并不能运行,直接宣告装逼失败。为此将介绍一下如何将生成的exe文件在其他电脑上运行,步骤如下:
1、在编译界面点击项目选项卡,在下拉菜单中选择属性。
2、点击属性后便会打开下图的窗口,点击配置属性的常规,在右侧的表中平台工具集处选择VisualStudio2013-WindowsXP(v120_xp),在MFC的使用处选择在静态库中使用MFC。
3、点击配置属性中的C/C++选项中选择代码处理,在右侧的运行库处选择多线程调试(/MTD)。
4、在配置属性中的链接器选项中选择系统,在子系统处根据你写的程序类型选择控制台或者窗口(是控制台程序就选择控制台,是生成窗口类型的就选择窗口)
这样也只能解决一些简单的程序,如果工程较大的话还是选用打包吧。
还有种比较简单的办法,可参考如下请点此处查看
Qt开发的程序怎么在别的电脑上使用
用Qt开发的软件,放到别人的电脑上,需要一些相应的dll,应用程序才能启动,编译模式是Debug.需要相应的带d的dll,release模式需要不带d的dll.寻找这些dll其实很简单,一个命令就解决了。
例如我的开发环境是VS2017Qt5.12.4
我是用的64位开发环境,那么需要把D:QtQt5.12.45.12.4msvc2017_64in添加到环境变量Path中,因为该目录有个命令windeployqt.exe可以帮我们寻找程序需要的dll, 这样以后运行时就很方便,任意一个目录都可以。
把生成的exe考到其它空文件夹,进入dos窗口,输入
windeployqtxxx.exe就可以把Qt需要的依赖全部加载进来
例如,命令运行结束后
根据自己的需要选择dll,一般Qt5Core.dll,Qt5Gui.dll,Qt5Widgets.dll,以及platforms文件夹是必须要的,这里面有系统平台依赖,其它用到Qt的那个模块就相应的添加,例如用到了网络模块,就需要QtNetwork.dll.
程序发布时都是用的Release模式,特殊情况用debug模式。
另外,如果是win10开发的,放到win7或者没装VS的win10上,可能还需要VS的运行时库,这个得自己找了,我装的是VS2017企业版,大概是这个目录:
C:ProgramFiles(x86)MicrosoftVisualStudio2017EnterpriseVCRedistMSVC14.16.27012x64Microsoft.VC141.CRT
有时即使找到了VS运行时库,可能还缺少api-ms-win-core-….之类dll的文件,这是应为缺少微软运行时库,安装一下文件即可。
VS也提供了,这个我暂时没测试,我用的Qt安装目录提供的。
到此,VSQt开发的程序就可以放到别人电脑跑起来了。