Python:将数据从一个文件传递到另一个文件

Python:将数据从一个文件传递到另一个文件,python,python-3.x,python-3.8,Python,Python 3.x,Python 3.8,例如,我有两个文件,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/pyt

例如,我有两个文件,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'])
-


我想要的是:每次运行a.py时,都会生成一个新的数字。但是,每次运行b.py时,都会打印相同的数字,直到再次运行a.py为止

(Python 3.8)

编辑:
我已经看到了一些类似的问题,这些问题是用pickle和mmap解决的。但我不熟悉这些模块。他们能帮忙吗?我无法使示例正常工作。

您可以使用
sys.argv
来实现:

#a.py
随机输入
导入子流程
def rnd():
返回random.random()
随机数=rnd()
如果随机数\u 1>0.5:
subprocess.Popen(['C:/Users/ex/AppData/Local/Programs/Python/Python38/Python.exe','b.py',str(随机数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程序中,它可以访问“安装”和“我的模块”,如下所示:

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)

您可以使用
sys.argv
进行以下操作:

#a.py
随机输入
导入子流程
def rnd():
返回random.random()
随机数=rnd()
如果随机数\u 1>0.5:
subprocess.Popen(['C:/Users/ex/AppData/Local/Programs/Python/Python38/Python.exe','b.py',str(随机数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程序中,它可以访问“安装”和“我的模块”,如下所示:

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)

你为什么要这样做?听起来你想把号码保存到一个文件里。但这取决于你为什么这么做在这种情况下,你不会把数据从一个文件传递到另一个文件。您有两个进程进行进程间通信。正如@JoelBerkeley所说,这取决于你想要什么。是否要保存此随机数?您希望将随机数生成和保存分离为两个“模块”吗?你想让两个不同的Python脚本互相通信吗?@JoelBerkeley这个例子就是一个例子。我认为进口会产生一个新的数字。我不想要一个新号码。我想我需要保存它,但我不知道如何保存。你为什么要这样做?听起来你想把号码保存到一个文件里。但这取决于你为什么这么做在这种情况下,你不会把数据从一个文件传递到另一个文件。您有两个进程进行进程间通信。正如@JoelBerkeley所说,这取决于你想要什么。是否要保存此随机数?您希望将随机数生成和保存分离为两个“模块”吗?你想让两个不同的Python脚本互相通信吗?@JoelBerkeley这个例子就是一个例子。我认为进口会产生一个新的数字。我不想要一个新号码。我想我需要保存它,但我不知道如何保存。谢谢。当我运行a.py时,它就工作了。但是,当我只运行b.py.Yes时,它会返回一条错误消息。当b.py单独运行时,您希望成为什么样的人?我希望:每次运行a.py时,都会生成一个新的数字。但是,每次运行b.py时,都会打印相同的数字,直到再次运行a.py。因此,如果有时单独运行b.py,为什么要使用a.py中的子进程来打开b.py?你应该把那个号码写进一个文件。我将更新我的答案。“那么,如果有时单独运行b.py,为什么要在a.py中使用subprocess来打开b.py呢?”这是一个简化的示例。“a.py”实际上是指下订单。“random_number_1”是唯一的订单ID。“b.py”将用于进行API调用,以使用订单ID检查订单的状态。谢谢。当我运行a.py时,它就工作了。但是,当我只运行b.py.Yes时,它会返回一条错误消息。当b.py单独运行时,您希望成为什么样的人?我希望:每次运行a.py时,都会生成一个新的数字。但是,每次运行b.py时,都会打印相同的数字,直到再次运行a.py。因此,如果有时单独运行b.py,为什么要使用a.py中的子进程来打开b.py?你应该把那个号码写进一个文件。我将更新我的答案。“那么,如果有时单独运行b.py,为什么要在a.py中使用subprocess来打开b.py呢?”这是一个简化的示例。“a.py”实际上是指下订单。“random_number_1”是唯一的订单ID。“b.py”将用于进行API调用,以使用订单ID检查订单的状态。