[英]Using subprocess with fab in python
我是Python的新手,並嘗試使用子進程在另一個腳本中運行腳本。 我在網上找到了幾個非常接近的資源,但遺憾的是無法幫助我運行我的代碼而沒有錯誤。
這是我想要做的:在我的script1(主腳本)中,我正在創建一個fabfile.py(script2)。 需要從script1執行此腳本2或fabfile.py。 經過一番研究,我發現execfile和os.systems不是很好的選擇因此我決定使用子進程。 (參考: 如何讓一個python文件運行另一個? )
這是我正在做的但沒有工作:
from os.path import expanduser
home = expanduser("~")
import os
os.getcwd()
desk = "/Desktop"
path = str(home)+str(desk)
f = open("fabfile.py","w") # Creating a fabfile.py
f.write("from fabric.api import run \ndef task1(): \n run('ls')")
import subprocess
host = raw_input("Enter the host IP with username e.g. root@10.0.0.2:")
p1 = subprocess.Popen(['fab', '-f path/fabfile.py', '-H host'],stdout=subprocess.PIPE)
output = p1.communicate()
print output
注意:在行中
p1 = subprocess.Popen(['fab', '-f path/fabfile.py', '-H host'],stdout=subprocess.PIPE)
我嘗試了很多不同的格式 - 引用和雙引號放置, $
和%
變量等等,但似乎沒有工作。 知道我做錯了什么嗎? 我看到的例子通常很簡單,沒有變量被用作參數。
單獨的旗幟
p1 = subprocess.Popen(['fab', '-f', path+'/fabfile.py', '-H', host],stdout=subprocess.PIPE)
加入路徑時,最好使用os.path.join()
fab_file = os.path.join(os.path.expanduser("~"), "Desktop", 'fabfile.py')
我發現還有一個問題,就是輸入密碼。 因為即使糾正了變量問題,我也會收到錯誤(另一個錯誤)。 我認為不是使用fab,我可以簡單地做,
from subprocess import Popen, PIPE
host = raw_input("Enter the host IP with user e.g. root@10.0.0.2:")
conn1 = Popen(['ssh',host,'ls'], stdin=PIPE)
conn1.communicate('password')
參考: 使用子進程發送密碼
代碼可能不是100%正確,但這樣的事情應該有效
import fabric.api as api
from path.my-other-fabfile import my_ssh_connection_blah
api.ls()
host = raw_input("Enter the host IP with username e.g. root@10.0.0.2:")
env['host']=host
my_ssh_connection_blah()
Python不會為您插入變量path
和host
,您需要明確地執行它。
更改:
p1 = subprocess.Popen(['fab', '-f path/fabfile.py', '-H host'],stdout=subprocess.PIPE)
至:
p1 = subprocess.Popen(['fab', '-f ' + path + '/fabfile.py', '-H ' + host],stdout=subprocess.PIPE)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.