【问题标题】:python variable as argumentpython变量作为参数
【发布时间】:2014-11-03 21:17:04
【问题描述】:

我正在使用 pexpect 运行一些 linux 命令。我在命令中使用变量时遇到问题。例如:

first_dir="/opt/dirA"
second_dir="/opt/dirB"

我想将 dirA 复制到 dirB:

cmd="cp -rp " +first_dir +" " +second_dir
print("cmd is ",cmd)
s.sendline(cmd)

它给出了一个错误:在 `/opt/dirA' 之后缺少目标文件操作数 但是打印输出是正确的(cp -rp /opt/dirA /opt/dirB)并且以下命令有效 s.sendline("cp -rp /opt/dirA /opt/dirB")

谁能看出我做错了什么?

【问题讨论】:

  • 什么是repr(cmd)?顺便提一句。使用字符串格式而不是+
  • repr(cmd) 给我 'cp -rp /opt/dirA /opt/dirB\x1b]0;root@myserver:~\x07 /opt/dirB
  • 如果所有这些内容都在repr 中,那么您显然已经在脚本中编辑了一些光标移动控制代码。解决方法是在可以修复这些问题的适当编辑器中编辑脚本。您可能还想首先弄清楚您是如何错误地编辑它的,以确保您不会再这样做。我猜你做了类似cat > script.py的事情?
  • 同时,您尝试pexpect 一个shell 有什么原因吗?如果您想使用 Python,它可以为您执行复制文件(请参阅shutil)或运行任意程序(请参阅subprocess)之类的操作。如果你想编写 shell 脚本,bash 本身通常比 Python 更好......
  • 感谢您的回答,我会尽力找出我做错了什么。我需要使用 pexpect,因为我想自动执行需要几个小时以及用户需要回答几个提示的任务。一旦我发现我的代码有问题,我会编辑我的问题。

标签: python linux pexpect


【解决方案1】:

您的 first_dirsecond_dir 不是字符串。试试first_dir = "/opt/dirA"

【讨论】:

  • 是的,抱歉我写得太快了。我做了更改,它们是字符串。
【解决方案2】:

秘诀是使用 os.environ 数组。 你可以在这里找到一个例子:

#!/usr/bin/python
import os
first_dir = os.environ["first_dir"]
second_dir = os.environ["second_dir"]

如您所见,脚本将Linux环境变量first_dir和second_dir读入两个Python同名变量。

【讨论】:

    猜你喜欢
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多