首先,我想说明这是一项作业任务。我不需要别人替我写代码,只需要指明正确的方向即可。
我们可以选择自己的项目进行开发,所以我正在编写一个程序,用来展示我迄今为止所写的所有东西。因此,我将制作一个程序,用户将输入程序的名称(从给定的列表中选择),然后在现有的shell中运行所选的程序。
但是,我无法找到如何调用外部程序的信息。是否有人能够指导我正确的方向?我考虑将所有代码放在一个长程序中,并使用一堆if循环来执行正确的代码,但我希望它比那要复杂一点。
首先,我想说明这是一项作业任务。我不需要别人替我写代码,只需要指明正确的方向即可。
我们可以选择自己的项目进行开发,所以我正在编写一个程序,用来展示我迄今为止所写的所有东西。因此,我将制作一个程序,用户将输入程序的名称(从给定的列表中选择),然后在现有的shell中运行所选的程序。
但是,我无法找到如何调用外部程序的信息。是否有人能够指导我正确的方向?我考虑将所有代码放在一个长程序中,并使用一堆if循环来执行正确的代码,但我希望它比那要复杂一点。
如果你想要将它们作为Python脚本进行调用,可以这样做:
import subprocess
subprocess.call(["python", "myscript.py"])
subprocess.call(["python", "myscript2.py"])
不过更好的方法是调用在其他脚本中编写的函数,像这样:
import myscript
import myscript2
myscript.function_from_script1()
myscript2.function_from_script2()
在myscript.py和myscript2.py文件中定义了function_from_script1()
等函数。有关更多信息,请参阅模块页面。
如果您需要传递额外的参数,请按照以下方式操作:
import subprocess
subprocess.call(["python", "myscript.py", "arg1", "arg2", "argN"])
# A sample Python script
sh$ cat snippet/demo.py
SOME_MODULE_GLOBAL=True
print("Hello, here is the demo snippet!")
# There is no `__init__.py in the _snippet_ directory
sh$ cat snippet/__init__.py
cat: snippet/__init__.py: No such file or directory
importlib.util
,即使demo.py
不是模块的一部分,也可以加载它:>>> import importlib.util
# Bypass the standard import machinery to manually load a Python script from
# a filepath
>>> spec = importlib.util.spec_from_file_location('demo','snippet/demo.py')
>>> spec
ModuleSpec(name='demo', loader=<_frozen_importlib_external.SourceFileLoader object at 0x7fa549344eb8>, origin='snippet/demo.py')
>>> module = importlib.util.module_from_spec(spec)
>>> module
<module 'demo' from 'snippet/demo.py'>
# The next command will run the module:
>>> spec.loader.exec_module(module)
Hello, here is the demo snippet!
# Module variables are accessible just like if it was a
# _normally_ imported module:
>>> module.SOME_MODULE_GLOBAL
True