我编写了一个脚本,通过从网站下载最新版本并覆盖正在运行的脚本来保持自己的最新状态.
我不确定在更新脚本后重新启动脚本的最佳方法是什么.
有任何想法吗?
我真的不想要一个单独的更新脚本.哦,它也必须在Linux/Windows上工作.
我有一个带有GUI的程序,通过Popen调用运行外部程序:
p = subprocess.Popen("<commands>" , stdout=subprocess.PIPE , stderr=subprocess.PIPE , cwd=os.getcwd())
p.communicate()
Run Code Online (Sandbox Code Playgroud)
但是无论我做什么,都会弹出控制台(我也尝试将NUL传递给文件句柄).如果没有得到我调用的二进制文件来释放它的控制台,有没有办法做到这一点?
可能重复:
在没有控制台的情况下使用Popen在pythonw中运行进程
如何从Python(2.7)中的衍生进程中消除Windows控制台?
我有一个Python程序,它调用一个单独的数字运算程序(用C语言编写)作为子进程多次(使用subprocess.check_call).它在Linux上运行良好,除了一件小事之外,它在Windows上运行良好:每次调用子进程时,都会创建一个命令提示符窗口,然后在子进程退出时很快就会被销毁.
这根本不会影响计算,但是它非常烦人,因为这个窗口一直在屏幕上闪烁,这使得在计算机上执行其他操作很困难,因为新的命令提示符窗口可以窃取键盘焦点.
如何简单地执行子进程(没有GUI),并阻止创建命令提示符窗口?
我在Windows上使用python 2.7来使用dcraw和PIL自动执行批量RAW转换.
问题是我每次运行dcraw时都会打开一个Windows控制台(每隔几秒就会发生一次).如果我使用.py运行脚本它不那么烦人,因为它只打开主窗口,但我更愿意只呈现GUI.
我是这样介入的:
args = [this.dcraw] + shlex.split(DCRAW_OPTS) + [rawfile]
proc = subprocess.Popen(args, -1, stdout=subprocess.PIPE)
ppm_data, err = proc.communicate()
image = Image.open(StringIO.StringIO(ppm_data))
Run Code Online (Sandbox Code Playgroud)
感谢Ricardo Reyes
次要修订到配方,在2.7看来,你需要得到STARTF_USESHOWWINDOW来自_subprocess(您也可以使用pywin32,如果你想要的东西,可能有点不太容易发生变化),所以为后人:
suinfo = subprocess.STARTUPINFO()
suinfo.dwFlags |= _subprocess.STARTF_USESHOWWINDOW
proc = subprocess.Popen(args, -1, stdout=subprocess.PIPE, startupinfo=suinfo)
Run Code Online (Sandbox Code Playgroud) 我试图右键单击该文件并重命名它,但它甚至不会向我显示扩展名,因此我可以将其删除。我也试过去属性,我也不能从那里做。我没有直接用 python 的 Tkinter 编码,我使用了我的书附带的定制图形库。