首页 > 解决方案 > 将变量传递给函数返回空列表

问题描述

我有一个似乎不喜欢我传递的变量的函数。例如:

hostname = 'server_1.local'
domain = 'mydomain.ca'

def get_env(hostname, domain):
    www_path = ["ls /var/www/", domain]
    command = ''.join(www_path)
    print(hostname, domain, command)
    server_response = subprocess.Popen(["ssh" , hostname, command], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
    envfile_path_list = server_response.stdout.readlines()
    return envfile_path_list

print(get_env(hostname, domain))

我得到的结果是主机名、域、命令很好,但列表为空

sever_1.local mydomain.ca ls /var/www/mydomain.ca

[]

但是,如果我在函数中传递完整的命令,subprocess.Popen()我会得到预期的结果

def get_env(hostname, domain):
    www_path = ["ls /var/www/", domain]
    command = ''.join(www_path)
    print(hostname, domain, command)
    server_response = subprocess.Popen(["ssh" , hostname, "ls /var/www/mydomain.ca/"], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
    envfile_path_list = server_response.stdout.readlines()
    return envfile_path_list

print(get_env(hostname, domain))
sever_1.local mydomain.ca ls /var/www/mydomain.ca

['archive\n', 'site\n', 'verification\n', 'app\n']

任何想法?

标签: python-3.x

解决方案


我注意到在版本 1 中 command = "ls /var/www/mydomain.ca" 但在版本 2 中它是 "ls /var/www/mydomain.ca/" (注意斜线 / )并且因为ls命令适用目录不是文件——我想这就是原因。


推荐阅读