python3.3.3:从Python脚本运行文件?

2024-10-03 23:28:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想制作一个自我复制的程序,它将生成一个新的Python文件,向它写入代码并运行它。下面是我想要的代码:

import os

num = 0

fileName = 'wrm' + str(num)
fileType = '.txt'

finalName = fileName + fileType
pyName = fileName + '.py'

f = open(finalName, 'w')
f.write("Whatever code I want to write")
f.close()
os.rename(finalName, pyName)

num = num + 1

# Here I need a command that runs the file, giving num as an 'argument'.

Tags: 文件代码pyimport程序txtosfilename
2条回答

^{}模块提供了运行任何程序的方法。在

你的脚本不是一个程序,而是一个脚本,需要由一个解释器程序执行。在本例中,您可能希望它由当前运行的同一个解释器程序执行,该解释器程序可用作^{}。在

当您运行python时,它将它的第一个参数视为要运行的脚本(在该脚本中它将变成^{}),并将任何其他参数作为该脚本的参数(成为sys.argv[1:])。在

命令行参数必须是字符串,因此必须序列化要传递给字符串的任何参数,然后在另一端反序列化它们。对于整数,这是微不足道的,但对于更复杂的类型则可能不是。在

会是这样的:

output = subprocess.check_output([sys.executable, pyName, str(num)])

显然,如果您不想捕获它的stdout,也不想捕获它的stderr,或者不想将非零retcode作为异常处理,或者希望在后台运行它而不是等待它,等等,那么subprocess函数调用将有所不同。但是如果你读了这些文档,你可能想做的任何事情都有很好的例子。在

然后,生成的脚本将执行以下操作:

^{pr2}$

尽管与子流程相比效率和清洁度相对较低,但您可以使用操作系统,这将复制用于执行任务的shell,:

os.system("python filename" + num.py) or os.system("python filename%s.py" % num)

或者如果它在另一个目录中,你可以通过

^{pr2}$

相关问题 更多 >