带有 lftp 变量的子进程
subprocess with variable for lftp
我正在尝试从 python 脚本调用子进程。脚本将使用特定参数在 linux 上调用 'lftp',如下所示。问题是我无法传递文件名(文件名每天都会不同)。
我尝试了几乎所有组合但都没有成功(例如:${fname}
、$fname
、{fname}
等等)。我 运行 没有想法,所以我正在寻求帮助。
每次我从 ftps 服务器 Access failed: 550 The system cannot find the file specified
收到响应。我可以正常登录和更改文件夹。
import subprocess
import datetime
fname=different_every_day
proc=subprocess.call(
["lftp", "-u", "user:password", "ftps://servername:990", "-e",
"set ftp:ssl-protect-data true; set ftp:ssl-force true; "
"set ssl:verify-certificate no;get ${fname}"])
print(proc)
P.S。接近正确的答案是 wagnifico,所以我会接受他的回答,但对于其他需要解决方案的人来说,它应该如下所示:
proc=subprocess.call(["lftp","-u","user:pass","ftps://example.something","-e","set ftp:ssl-protect-data true; set ftp:ssl-force true; set ssl:verify-certificate no;cd Ewidencja;pget "+'"'+fname+'"'])
在这里试试:
import os
import time
def python_to_bash(cli_args):
output = os.popen(cli_args).read()
return output
file_name = str(time.time())+".xls"
python_to_bash("lftp -u user:password ftps://servername:990 -e set ftp:ssl-protect-data true set ftp:ssl-force true set ssl:verify-certificate no get "+file_name)
我不知道你需要的命令是否正确,但是当我需要创建任何动态名称时,我会以这种形式使用
您正在混合使用 python 和环境变量。
当您使用 ${fname}
时,bash 认为 fname
是一个环境变量,您的 OS 知道它。由于未定义,它将使用空值,因此找不到文件。
您要么需要在您的终端中定义 fname
,然后他们在 python 中调用它,如问题:
export fname='2020-10-29 - All computers.xls'
python your_code.py
另外,调用subprocess.call
时需要加上标志shell=True
或完全在python中定义:
fname='2020-10-29 - All computers.xls'
proc=subprocess.call(
["lftp", "-u", "user:password", "ftps://servername:990", "-e",
"set ftp:ssl-protect-data true; set ftp:ssl-force true; "
"set ssl:verify-certificate no;get " + fname])
我正在尝试从 python 脚本调用子进程。脚本将使用特定参数在 linux 上调用 'lftp',如下所示。问题是我无法传递文件名(文件名每天都会不同)。
我尝试了几乎所有组合但都没有成功(例如:${fname}
、$fname
、{fname}
等等)。我 运行 没有想法,所以我正在寻求帮助。
每次我从 ftps 服务器 Access failed: 550 The system cannot find the file specified
收到响应。我可以正常登录和更改文件夹。
import subprocess
import datetime
fname=different_every_day
proc=subprocess.call(
["lftp", "-u", "user:password", "ftps://servername:990", "-e",
"set ftp:ssl-protect-data true; set ftp:ssl-force true; "
"set ssl:verify-certificate no;get ${fname}"])
print(proc)
P.S。接近正确的答案是 wagnifico,所以我会接受他的回答,但对于其他需要解决方案的人来说,它应该如下所示:
proc=subprocess.call(["lftp","-u","user:pass","ftps://example.something","-e","set ftp:ssl-protect-data true; set ftp:ssl-force true; set ssl:verify-certificate no;cd Ewidencja;pget "+'"'+fname+'"'])
在这里试试:
import os
import time
def python_to_bash(cli_args):
output = os.popen(cli_args).read()
return output
file_name = str(time.time())+".xls"
python_to_bash("lftp -u user:password ftps://servername:990 -e set ftp:ssl-protect-data true set ftp:ssl-force true set ssl:verify-certificate no get "+file_name)
我不知道你需要的命令是否正确,但是当我需要创建任何动态名称时,我会以这种形式使用
您正在混合使用 python 和环境变量。
当您使用 ${fname}
时,bash 认为 fname
是一个环境变量,您的 OS 知道它。由于未定义,它将使用空值,因此找不到文件。
您要么需要在您的终端中定义 fname
,然后他们在 python 中调用它,如问题:
export fname='2020-10-29 - All computers.xls'
python your_code.py
另外,调用subprocess.call
时需要加上标志shell=True
或完全在python中定义:
fname='2020-10-29 - All computers.xls'
proc=subprocess.call(
["lftp", "-u", "user:password", "ftps://servername:990", "-e",
"set ftp:ssl-protect-data true; set ftp:ssl-force true; "
"set ssl:verify-certificate no;get " + fname])