2016-08-17 144 views
0

我一直在从一个脚本发送一个变量到另一个脚本,并做了一些基本的事情很容易,但我已经卡住了,并希望得到一些输入。发送从一个脚本到另一个脚本的循环变量的值

这是我script1.py

import time 
x = 0 

while x < 100: 
    x = x+1 
    time.sleep(1) 

这是我script2.py

import subprocess 

subprocess.Popen("python script1.py", shell=True) 

from script1 import x 

print(x) 

这样做的输出仅仅是100

有没有一种方法来打印变量每当它通过script2.py更新时,它们都是x

所有这些的原因是我正在从脚本中的串行端口读取数据,但是我希望在不同的脚本中使用输出。因此,只要有数据从串行端口获得存储在一个变量中,我希望将该变量传递给另一个脚本。

编辑:我有一个python脚本,它脚本从一个串口读取数据并记录数据。

就这么说,我想要第二个脚本,它可以从第一个脚本获取包含数据的列表,以便为不同的任务操作它。

编辑2: 我修改了代码如下,但没有打印。

#script 1 
import time 
x = 0 

while x < 100: 
    x = x+1 
    print(x) 
    time.sleep(1) 

#script 2 
import subprocess 

proc = subprocess.Popen(['python','script1.py'],stdout=subprocess.PIPE) 

while True: 
    line = proc.stdout.readline() 
    print(line) 
+0

那么,是你通过一个子/管连接两个脚本,或者你想要将一个导入另一个?你目前的方法没有任何意义。 – deceze

+0

我的脚本通过子过程链接。什么样的方法会有意义?我对python仍然很陌生,所以有很多我不熟悉的东西。 – BadProgrammer

+0

如果您的脚本通过子流程/管道进行通信,则需要通过该管道传递值;例如'script1.py'写入标准输出,'script2.py'读取第一个脚本的标准输出管道。那么你也不会从'script1'导入x,因为这会绕过整个子流程/管道。 – deceze

回答

0

我终于得到它的工作。感谢来自Vadim的反馈,我能够了解到这些东西是如何工作的。以下是我的代码。

script1.py:

import sys, time 
x=0 
while x<10: 
    print(x) 
    sys.stdout.flush() 
    x = x+1 
    time.sleep(1) 

script2.py:

import subprocess 

proc = subprocess.Popen('python script1.py', 
         shell=True, 
         stdin=subprocess.PIPE, 
         stdout=subprocess.PIPE, 
         ) 
while True: 
    output = proc.stdout.readline() 
    if output == '': 
     break 
    else: 
     print output.rstrip() 

输出:

0 #waits one second 
1 #waits one second 
2 #waits one second 
. 
. 
. 
8 #waits one second 
9 #waits one second 
0

main.py

from subprocess import Popen, PIPE 
import sys 

p = Popen(['py', 'client.py'], stdout=PIPE) 
while True: 
    o = p.stdout.read(1) 
    if o: 
     sys.stdout.write(o.decode('utf-8')) 
     sys.stdout.flush() 
     print '*' 
    else: break 

client.py

import time 
for a in xrange(3): 
    time.sleep(a) 
    print a 

OUT:

0* 
* 

* 
1* 
* 

* 
2* 
* 

* 
+0

我对此有点困惑。我有两个单独的脚本,而不是脚本中调用的函数。是否有可能修改这个,所以它会在两个不同的脚本? – BadProgrammer

+0

['ping','127.0.0.1']是“不同的脚本” –

+0

感谢您的更改。我尝试运行并得到以下结果: 'python test_threading.py Traceback(最近调用最后一个): 文件“test_threading.py”,第2行,在 与Popen(['ping','127.0.0.1 '],stdin = PIPE,stdout = PIPE,stderr = PIPE,shell = True),因为p: AttributeError:__exit__' – BadProgrammer

相关问题