我正在用Python编写一些代码,在轮询服务器后检查许可证密钥的有效性。如果它是有效的,那么Python程序依次运行一些bash脚本。
如何创建python脚本(检查许可)和bash脚本(执行任务)的组合二进制文件?
以下是我认为可以解决的办法,但我真的不确定:
发布于 2013-08-08 09:13:20
我会使用第一个选项:将bash脚本嵌入到Python脚本中的多行字符串中,然后写出该脚本并使用subprocess模块运行脚本:
import tempfile
import subprocess
script_one = '''\
echo "Hello world!"
echo "This is a bash script. :-)"
'''
def run_script(script):
with tempfile.NamedTemporaryFile() as scriptfile:
scriptfile.write(script)
scriptfile.flush()
subprocess.call(['/bin/bash', scriptfile.name])
run_script(script_one)run_script()函数接受bash脚本源,将其写入临时文件,执行它,并在完成时自动清理临时文件。
演示:
$ python /tmp/scripttest.py
Hello world!
This is a bash script. :-)Python装饰器在这里没有帮助;查看这些没有意义;装饰器只是用来包装其他Python函数的Python函数。
如果脚本很大,您可以尝试用zlib压缩它,base64对它进行编码,然后将它嵌入到Python文件中;使用.decode('base64')并将结果传递给zlib模块,首先给出一个解压字符串。ZLIB压缩减少了大小,但导致二进制数据,总是有点难以嵌入,而不必处理适当的转义和行长度。Base64编码再次将二进制数据转换为多行的ASCII安全数据,尽管代价是多25%的字节:
>>> import zlib
>>> zlib.compress(script_one).encode('base64')
'eJxLTc7IV1DySM3JyVcozy/KSVFU4koFi4VkZBYrAFGiQlJicYZCcXJRZkGJnoKVrqYSFwDnexDe\n'
>>> print """script_one = '''\\\n{}'''""".format(_)
script_one = '''\
eJxLTc7IV1DySM3JyVcozy/KSVFU4koFi4VkZBYrAFGiQlJicYZCcXJRZkGJnoKVrqYSFwDnexDe
'''请注意,对于这个简短的脚本示例,这会将大小从54个字符增加到77个字符,但是对于较长的脚本,您应该会看到相当大的缩小。
解压缩就像zlib.decompress(script_one.decode('base64'))一样简单
https://softwareengineering.stackexchange.com/questions/207613
复制相似问题