Python: 将数据从一个文件传递到另一个文件
Python: Pass Data From One File to Another
例如,我有两个文件,a.py和b.py。我希望 b.py 从 a.py 访问数据。
#a.py
import random
import subprocess
def rnd():
return random.random()
random_number_1 = rnd()
if random_number_1 > 0.5:
subprocess.Popen(['C:/Users/ex/AppData/Local/Programs/Python/Python38/python.exe', 'b.py'])
-
#b.py
#get the number generated from a.py and print it.
我想要的是:每次 a.py 是 运行 时,都会生成一个新号码。但是,每次 b.py 为 运行,都会打印相同的数字,直到 a.py 再次为 运行。
(Python 3.8)
编辑:
我已经看到一些关于旧版本 Python 的类似问题已通过 pickle 和 mmap 解决。但是我不熟悉那些模块。他们会有帮助吗?我无法让示例正常工作。
你可以使用 sys.argv
:
#a.py
import random
import subprocess
def rnd():
return random.random()
random_number_1 = rnd()
if random_number_1 > 0.5:
subprocess.Popen(['C:/Users/ex/AppData/Local/Programs/Python/Python38/python.exe', 'b.py', str(random_number_1)])
并且在 b.py 中您可以访问该号码:
#b.py
import sys
random_number_1 = float(sys.argv[1])
print(sys.argv[1])
那么sys.argv
是什么?例如,当您在命令提示符下编写时:
C:\> pip install my_module
在 pip 程序中,它访问 "install" 和 "my_module",就像这样:
import sys
sys.argv[0] # full path of program (for example C:\Users\User\AppData\Local\Programs\Python\Python37\Scripts\pip.exe)
sys.argv[1] # "install"
sys.argv[2] # "my_module"
这样你只能传递一次那个数字,如果你在a.py中改变它在b.py中不会改变。另外,如果您愿意,可以将该数字写入文件:
#a.py
import random
import subprocess
import pickle
def rnd():
return random.random()
random_number_1 = rnd()
with open("C:\data.txt","wb") as f:
f.write(pickle.dumps(random_number_1))
if random_number_1 > 0.5:
subprocess.Popen(['C:/Users/ex/AppData/Local/Programs/Python/Python38/python.exe', 'b.py'])
并且在 b.py 中您可以阅读该文件:
#b.py
import pickle
with open("C:\data.txt","rb") as f:
random_number_1 = pickle.load(f)
print(random_number_1)
例如,我有两个文件,a.py和b.py。我希望 b.py 从 a.py 访问数据。
#a.py
import random
import subprocess
def rnd():
return random.random()
random_number_1 = rnd()
if random_number_1 > 0.5:
subprocess.Popen(['C:/Users/ex/AppData/Local/Programs/Python/Python38/python.exe', 'b.py'])
-
#b.py
#get the number generated from a.py and print it.
我想要的是:每次 a.py 是 运行 时,都会生成一个新号码。但是,每次 b.py 为 运行,都会打印相同的数字,直到 a.py 再次为 运行。
(Python 3.8)
编辑: 我已经看到一些关于旧版本 Python 的类似问题已通过 pickle 和 mmap 解决。但是我不熟悉那些模块。他们会有帮助吗?我无法让示例正常工作。
你可以使用 sys.argv
:
#a.py
import random
import subprocess
def rnd():
return random.random()
random_number_1 = rnd()
if random_number_1 > 0.5:
subprocess.Popen(['C:/Users/ex/AppData/Local/Programs/Python/Python38/python.exe', 'b.py', str(random_number_1)])
并且在 b.py 中您可以访问该号码:
#b.py
import sys
random_number_1 = float(sys.argv[1])
print(sys.argv[1])
那么sys.argv
是什么?例如,当您在命令提示符下编写时:
C:\> pip install my_module
在 pip 程序中,它访问 "install" 和 "my_module",就像这样:
import sys
sys.argv[0] # full path of program (for example C:\Users\User\AppData\Local\Programs\Python\Python37\Scripts\pip.exe)
sys.argv[1] # "install"
sys.argv[2] # "my_module"
这样你只能传递一次那个数字,如果你在a.py中改变它在b.py中不会改变。另外,如果您愿意,可以将该数字写入文件:
#a.py
import random
import subprocess
import pickle
def rnd():
return random.random()
random_number_1 = rnd()
with open("C:\data.txt","wb") as f:
f.write(pickle.dumps(random_number_1))
if random_number_1 > 0.5:
subprocess.Popen(['C:/Users/ex/AppData/Local/Programs/Python/Python38/python.exe', 'b.py'])
并且在 b.py 中您可以阅读该文件:
#b.py
import pickle
with open("C:\data.txt","rb") as f:
random_number_1 = pickle.load(f)
print(random_number_1)