gpt4 book ai didi

python - 如何在python中从命令行导入文件

转载 作者:太空宇宙 更新时间:2023-11-03 14:46:27 24 4
gpt4 key购买 nike

我正在使用 python,我应该从命令行读取文件以进行进一步处理。我的输入文件有一个二进制文件,应该读取该二进制文件以进行进一步处理。这是我的输入文件 sub.py:

   CODE = " \x55\x48\x8b\x05\xb8\x13\x00\x00"

我的主文件应该如下所示:

import pyvex
import archinfo
import fileinput

import sys
filename = sys.argv[-1]


f = open(sys.argv[-1],"r")
CODE = f.read()
f.close()
print CODE

#CODE = b"\x55\x48\x8b\x05\xb8\x13\x00\x00"
# translate an AMD64 basic block (of nops) at 0x400400 into VEX
irsb = pyvex.IRSB(CODE, 0x1000, archinfo.ArchAMD64())

# pretty-print the basic block
irsb.pp()

# this is the IR Expression of the jump target of the unconditional exit at the end of the basic block
print irsb.next

# this is the type of the unconditional exit (i.e., a call, ret, syscall, etc)
print irsb.jumpkind

# you can also pretty-print it
irsb.next.pp()

# iterate through each statement and print all the statements
for stmt in irsb.statements:
stmt.pp()

# pretty-print the IR expression representing the data, and the *type* of that IR expression written by every store statement
import pyvex
for stmt in irsb.statements:
if isinstance(stmt, pyvex.IRStmt.Store):
print "Data:",
stmt.data.pp()
print ""

print "Type:",
print stmt.data.result_type
print ""

# pretty-print the condition and jump target of every conditional exit from the basic block
for stmt in irsb.statements:
if isinstance(stmt, pyvex.IRStmt.Exit):
print "Condition:",
stmt.guard.pp()
print ""

print "Target:",
stmt.dst.pp()
print ""

# these are the types of every temp in the IRSB
print irsb.tyenv.types

# here is one way to get the type of temp 0
print irsb.tyenv.types[0]

问题是,当我运行“python maincode.py sub.py”时,它会将代码读取为文件内容,但其输出与我直接将 CODE 添加到语句 irsb = pyvex 中时完全不同。 IRSB(CODE, 0x1000, archinfo.ArchAMD64())。有谁知道问题是什么以及如何解决它?我什至使用从输入文件导入,但它不读取文本。

最佳答案

你考虑过__import__方式吗?

你可以这样做

mod = __import__(sys.argv[-1])
print mod.CODE

只需传递不带 .py 扩展名的文件名作为命令行参数:

python maincode.py sub

编辑:显然使用 __import__discouraged 。相反,您可以使用 importlib 模块:

import sys,importlib
mod = importlib.import_module(sys.argv[-1])
print mod.CODE

..它的工作原理应该与使用 __import__

相同

如果您需要将路径传递给模块,一种方法是在每个目录中添加一个名为

的空文件
__init__.py

这将允许 python 将目录解释为模块 namespace ,然后您可以以其模块形式传递路径:python maincode.py path.to.subfolder.sub

如果由于某种原因您不能或不想将目录添加为命名空间,并且不想在任何地方添加 init.py 文件,您也可以使用 imp.find_module。您的 maincode.py 将如下所示:

import sys, imp
mod = imp.find_module("sub","/path/to/subfolder/")
print mod.code

您必须编写代码,将命令行输入分解为模块部分“sub”和文件夹路径“/path/to/subfolder/”。那有意义吗?一旦准备好,您将像您期望的那样调用它,python maincode.py/path/to/subfolder/sub/

关于python - 如何在python中从命令行导入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46203461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com