我正在尝试使用python和amp;来自动执行完整的CTS设置和执行。 Ubuntu上的monkeyrunner,其中大部分都进展顺利。作为最后一步,我尝试执行以下python命令在特定设备上启动CTS:
cts_tradefed_script = "./android-cts/tools/cts-tradefed"
process = subprocess.Popen([cts_tradefed_script, "run", "cts", "-s", '"' + serialno + '"', "--plan", "CTS"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
相当于:
./android-cts/tools/cts-tradefed run cts -s "R32CB054TSZ" --plan CTS
在命令行中,我得到:
Android CTS 4.2_r4
No commands for non-interactive mode; exiting.
06-17 17:32:32 I/: Detected new device R32CB054TSZ
Saved log to /tmp/tradefed_global_log_9173619073367947049.txt
06-17 17:32:32 I/CommandScheduler: All done
CTS测试不执行。是否存在我忘记的命令,或者使用Python是不可能的?
答案 0 :(得分:1)
cts_tradefed_script = "./android-cts/tools/cts-tradefed"
process = subprocess.Popen([cts_tradefed_script + " " + serialno], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
编辑:没有必要使用脚本。只需将所有内容输入为串联字符串即可。
答案 1 :(得分:0)
非交互式的问题是,您只能运行一个命令,所以您应该尝试以交互式模式运行。
要以交互方式运行,这是一种方法:
#pip install paramiko
import paramiko
import time
def run_remote_command(channel, command):
channel.send(command)
whole_output = ""
while True:
if channel.recv_ready():
output = channel.recv(1024)
whole_output+=output
else:
time.sleep(0.5)
if not(channel.recv_ready()):
return whole_output
server ="fill you own here"
username = "fill you own here"
password = "fill you own here"
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(server, 22 ,username, password)
channel =ssh.get_transport().open_session()
channel.get_pty()
channel.invoke_shell()
run_1 =run_remote_command(channel,"~/android/out/host/linux-x86/cts/android-cts/tools/cts-tradefed list devices" + "\n")
print run_1
run_2 =run_remote_command(channel,"run cts" + "\n")
print run_2
run_3 =run_remote_command(channel,"l i" + "\n")
print run_3