我试图在python中创建一些函数,这样我就可以连接到linux终端并做一些事情(比如在这种情况下,创建一个文件)。我的代码,部分工作。唯一不起作用的是你想在输入代码后做某事。比如你创建文件然后想要导航到其他地方(例如cd / tmp)。它不会执行下一个命令,只会添加到创建的文件中。
def create_file(self, name, contents, location):
try:
log.info("Creating a file...")
self.device.execute("mkdir -p {}".format(location))
self.cd_path(location)
self.device.sendline("cat > {}".format(name))
self.device.sendline("{}".format(contents))
self.device.sendline("EOF") # send the CTRL + D command to save and exit I tried here with ^D as well
except:
log.info("Failed to create the file!")
该文件的内容是:
cat test.txt
#!/bin/bash
echo "Fail Method Requested"
exit 1
EOF
ls -d /tmp/asdasd
执行的命令顺序为:
execute.create_file(test.txt, the_message, the_location)
execute.check_path("/tmp/adsasd") #this function just checks with ls -d if the directory exists.
我尝试使用sendline以下组合:
^D, EOF, <<EOF
我真的不明白我是如何做到这一点的。我只想创建一个包含特定消息的文件。 (在研究如何使用VI时我遇到了同样的问题,但是我需要的命令就是ESC的命令)
如果有人可以帮助提供一些很棒的输入!!
编辑:正如Rob在下面提到的,发送角色&#34; \ x04&#34;实际上有效。对于遇到此问题的其他人,如果需要,您还可以参考此图表以获取其他组合: http://donsnotes.com/tech/charsets/ascii.html
答案 0 :(得分:5)
你可能需要发送EOF字符,通常是CONTROL-D,而不是三个字符E
,O
和F
。
self.device.sendline("\x04")
答案 1 :(得分:2)
http://wiki.bash-hackers.org/syntax/redirection#here_documents
此处docs允许您使用任何您喜欢的文件输入终止字符串来表示文件末尾(例如您现在尝试使用的文字EOF)。引用该字符串告诉shell不要解释heredoc内容中的扩展,确保将所述内容视为文字。
在此处使用pipes.quote()
可确保带有文字引号,$
s,空格或其他令人惊讶的字符的文件名不会破坏您的脚本。 (当然,你需要import pipes
;相比之下,在Python 3上,这已经转移到了shlex.quote()
。
self.device.sendline("cat > {} <<'EOF'".format(pipes.quote(name)))
然后您可以按原样编写EOF,告诉bash将其解释为文件输入的结尾。