【发布时间】:2021-08-15 17:30:07
【问题描述】:
我需要制作一个从系统(在我的例子中是 Linux)中获取一些变量的可执行文件。
我为此尝试了 nuitka,但是在另一台机器上进行测试时,我看到它使用了我编译它的机器上的变量。
我需要的是程序从运行它的机器上获取所需的数据(例如,我得到用户的主文件夹)。它试图搜索编译文件所在机器的用户,这有点毁了整个要点。
编辑:添加代码以进行澄清
username = pexpect.run('whoami')
userpath = '/home/{}'.format(username)
filename = __file__
filename = filename[2:]
pexpect.run('cp {} {}/{}'.format(filename, userpath, filename))
当它作为 .py 运行时,它会获得正常工作所需的一切,例如正确的用户名和文件名。但是当我通过 nuitka 运行它并在另一台机器上作为 .exe 运行时,它使用的名称就像我在我写它的机器上运行它一样。例如。 '/home/user1' 代替 '/home/user2' 和 'filename.py' 代替 'filename.exe'。
【问题讨论】:
-
阅读How to Ask 你的问题不清楚;什么变量,从哪里来?你如何将你的 python 代码转换成可执行文件?请在您的问题中编辑 minimal 代码示例,并用具体示例解释它的错误之处 - 如果有错误消息,请在您的问题中编辑 full 错误消息作为文本
-
你能澄清你的问题吗?编译源代码的全部目的是使程序不使用源代码。这会影响源代码的每个功能,例如它的位置。您是否正在尝试获取可执行位置?
-
好吧,我需要生成的文件是一个可执行文件,其行为方式与我刚刚运行
python filename.py -
请注意,运行
whoami、pwd等不需要使用pexpect。 Python 已经为这些东西提供了绑定,例如os.getuid()/getpass.getuser()、os.getcwd()。避免这些事情,尤其是重构与环境相关的其他值——例如,使用Path.home()获取主目录即使它不在/home中。跨度> -
看来你在看for this。
标签: python linux python-2.7