2013-08-17 64 views
1

我有两个.py程序。我称第二个.py程序,第二个程序解决了一个问题。所以我想让这个解决方案到第一个并使用。例如:如何从另一个.py中获取变量

1.py:

呼叫2.py

Y = X + 2

2.py:

X = 2 + 2

+0

有一个名为pickle的python例程可以帮助解决这个问题,但我相信接收代码必须知道拿起pickle变量。你可以发布你正在尝试使用的代码吗? – Paul

+0

@Paul我更新了我的问题 – nurimuri

回答

0

使用subprocess模块,并创建一个管道。然后,您可以腌制变量并通过管道发送它(请参阅subprocess的文档)。

下面是一个例子:

import sys 
import subprocess as sp 
import cPickle 

BEGIN = 'pickle_begin' 

def send_and_exit(x): 
    sys.stdout.write(BEGIN + cPickle.dumps(x)) 
    sys.stdout.flush() 
    sys.exit(0) 

def execute_and_receive(filename): 
    p = sp.Popen(["python", filename], stdout=sp.PIPE) 
    (out, err) = p.communicate() 
    return cPickle.loads(out[out.find(BEGIN) + len(BEGIN):]) 

1.py

from communicate import * 
x = execute_and_receive("2.py") 
y = x + 2 

2.py

from communicate import * 
x = 2 + 2 
send_and_exit(x) 

用于通信communicate.py模块为了确保您在stdout流的正确位置开始取消打印,我建议设置一个标记,就像我在BEGIN字符串中那样。可能有更优雅的解决方案,如果是的话,我也很感兴趣。

+0

ıt有点复杂,没有任何其他机会做到这一点,我只是发送价值一个.py到另一个。 – nurimuri

+0

至少不会有单个Python语句,因为您需要某种进程间通信。当然,你可以将上面的代码包装到一些函数中,让你可以在父类中调用类似'send_and_return(x)'和'x = execute_and_receive('name.py')'的东西。 – dastrobu

+0

你有上面提到的什么教程吗?我必须阅读以处理 – nurimuri

1

您需要将.py文件导入到另一个文件中 在OS中运行它并不会在新文件中获得变量

使用

from module import function 

您可以再调用从这个新文件中的函数,并打印出值,它返回

+0

我该如何使用它。你能举个例子吗? – nurimuri

+0

但它然后运行在相同的过程中,你并不总是想要的。例如,如果子模块执行内存密集型工作,并且希望确保分配的内存事后返回到系统。如果您执行导入,则不能保证python堆管理器会将所有内存都返回给系统。 – dastrobu

+0

你有上面提到的什么教程吗? – nurimuri

相关问题