我有一个连续运行单元模型的Python程序。当按下“A”或“B”时,某些功能被调用 - 单元划分等,当按下“esc”键时,模拟退出。有没有办法让程序退出,然后在按下“esc”按钮时自行重启?程序可以自行调用吗?
0
A
回答
2
是的。这可能是你想要
The-Evil-MacBook:~ ivucica$ cat test.py
#!/usr/bin/env python
import sys
import os
print sys.argv[0] + " with argcount " + str(len(sys.argv))
if len(sys.argv) < 2 or sys.argv[1] != "2":
print "doing recursion"
os.system(sys.argv[0] + " 2");
else:
print "not doing recursion"
exit(0)
The-Evil-MacBook:~ ivucica$ ./test.py
./test.py with argcount 1
doing recursion
./test.py with argcount 2
not doing recursion
The-Evil-MacBook:~ ivucica$
什么,所以当你想程序重新启动本身,只是调用它使用os.system()
并立即拨打exit(some_return_code_here)
(零意味着“没有错误”)sys.argv[0]
。你可能想传递一个额外的参数,所以它知道它是一个重新启动的实例,但并不需要这样做。我这样做是为了防止无限循环。如果你有其他机制来防止无限循环,那就使用它们。
请注意:对于上面的代码,您需要直接运行程序; python test.py
对我来说并没有伎俩(原因很明显)。此外,上面可能只适用于UNIX系统。
请注意,此外,system()
正在阻止。如果您需要原始程序在启动新程序后完成关机,最简单的方法是将新程序发送到后台(因此“解除”system()
)。只需修改这样的行:
os.system(sys.argv[0] + " 2 &");
注意“&”,它告诉shell新工艺送入后台。
0
显而易见的解决方案是程序启动一个新的副本作为它退出前的最后一件事情。但是您可能应该更多地考虑模拟器的编码方式,以便在不需要完全重启程序的情况下进行重置。
+0
但如果我在后台调用该程序,我的按键会被传递给它吗?如果我正常打电话,最后一次模拟不会继续运行吗? – 2010-10-23 08:33:16
相关问题
- 1. Android活动可以自行调用吗?
- 2. LinkedIn应用程序可以自行执行操作吗?
- 3. 我可以使用Guzzle自行开发应用程序吗?
- 4. 我可以从外部捕获程序调用和执行吗?
- 5. GNOME应用程序可以自动执行吗?怎么样?
- 6. Android应用程序可以自行升级吗?
- 7. Quartz调度程序可以实现吗?
- 8. gdb可以调试suid root程序吗?
- 9. 你可以在Android应用程序中调用python例程吗?
- 10. 线程可以调用SuspendThread传递自己的线程ID吗?
- 11. 主线程:可以运行的程序可以被抢占吗?
- 12. Android,可以从拨号程序运行应用程序吗?
- 13. 我可以使用QR码调用自定义应用程序吗?
- 14. MySQL:存储过程可以调用Java程序吗?
- 15. jBPM Executor可以用作业务流程的调度程序吗?
- 16. 单线程程序可以中断JVM调用吗?
- 17. 我可以远程调试vb6应用程序吗?
- 18. 使用twilio https://www.twilio.com/ Android应用程序可以调用应用程序吗?
- 19. iPhone应用程序可以调用另一个应用程序吗?
- 20. 我可以只在应用程序中调用Realm.getInstance()一次吗?
- 21. 我可以从PHP调用nodejs应用程序吗?
- 22. Mac应用程序可以调节互联网的使用吗?
- 23. 应用程序块可以调用SendInput吗?
- 24. 可以从C++/CX应用程序调用OpenCV库吗?
- 25. 你可以从MS SQL Server调用C++应用程序吗?
- 26. .NET 4应用程序可以调用.NET 3.5 WCF服务吗?
- 27. Force Apex应用程序可以调用外部Web服务吗?
- 28. Ruby应用程序可以调用Java代码吗?
- 29. 我可以在JSP中调用本地用户程序吗?
- 30. 对象可以调用主应用程序吗?
你最终是否会在等待子进程结束之前结束原始(父进程)进程?如果你重复这个动作很多次,那不会那么好。 – 2010-10-23 08:49:56
是的,你这样做,因为system()被阻塞。你是对的。尽管如此,提问者并不确定这是否会做很多次。我认为最简单的方法是在system()的命令行结尾处传递一个“&”可能会诀窍,因为shell然后应该把新程序放在后台。但是,只有在UNIXoid系统下。 – 2010-10-23 08:52:33
也许(在UNIXoid系统上,至少)你可以考虑EXEC没有这个问题。我对Python并不熟悉,但在Perl中它使用起来很简单。 – 2010-10-24 01:02:12