2016-08-17 142 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

相關問題