&引用;语法错误:未终止的带引号的字符串";从Python调用bash脚本时出错
有一种情况,我需要在一个python脚本中调用一个bash脚本,而这个脚本又在另一个python脚本中调用 下载-output-files.py:&引用;语法错误:未终止的带引号的字符串";从Python调用bash脚本时出错,python,python-3.x,shell,Python,Python 3.x,Shell,有一种情况,我需要在一个python脚本中调用一个bash脚本,而这个脚本又在另一个python脚本中调用 下载-output-files.py: #!/usr/bin/env python import os import sys for i in node_path: cmd="python watcher.py "+i os.system(cmd) ##calling another python script watcher.py: #!/usr/bin/env py
#!/usr/bin/env python
import os
import sys
for i in node_path:
cmd="python watcher.py "+i
os.system(cmd) ##calling another python script
watcher.py:
#!/usr/bin/env python
import os
import time
if 'finish' in child:
print "finish found"
cmd="./copy_output_file.sh "+node
os.system(cmd) ##Calling shell script here
复制_输出_文件.sh:
#!/bin/bash
filepath=$1
cp ff /home/likewise-open/TALENTICA-ALL/mayankp/kazoo/$filepath
当我运行下载输出文件.py时,它调用watcher.py,这反过来调用复制输出文件.sh,下面是我面临的错误:
mayankp@mayankp:~/kazoo$ python download-output-files.py
finish found
sh: 1: Syntax error: Unterminated quoted string
当我在pythonshell中运行相同的命令时,它成功地运行了bash脚本。我缺少什么?将字符串连接到shell命令中通常是不明智的。尝试在
os.system(cmd)
调用之前插入print(cmd)
,以准确了解您试图运行的命令,我希望您会注意到问题所在(可能是文件名中有撇号)
尝试使用
subprocess.call(['python',watcher.py',i])
而不是os.system(“python watcher.py”+i)
,以及subprocess.call(['/copy\u output\u file.sh',node])
将字符串连接到shell命令中通常是不明智的。尝试在os.system(cmd)
调用之前插入print(cmd)
,以准确了解您试图运行的命令,我希望您会注意到问题所在(可能是文件名中有撇号)
尝试使用
subprocess.call(['python',watcher.py',i])
而不是os.system(“python watcher.py”+i)
,以及subprocess.call(['/copy\u output\u file.sh',node])
而不是os.system(cmd=“/copy\u output\u file.sh”+node)
如果它是由shell脚本中的不带引号的变量引起的,我不会感到惊讶。但是为什么要使用shell脚本来实现一些可以用Python轻松完成的事情呢?!这个问题的代码似乎太多了。如果你能精简到一个最小的例子,我将撤回我的投票。@ChrisMartin,我已经编辑了我的代码,保留了最小的代码。你现在能帮忙吗?@Biffen,你在shell脚本中说无引号的变量是什么意思?我想将一个文件复制到另一台服务器,因此我想使用scp。在上面的代码中,它只是一个bash脚本示例。我不知道如何用Python将一个文件复制到另一台服务器。@MayankPorwalfilepath=$1
应该是filepath=“$1”
,等等。这是检查这些东西的一个很好的工具。如果它是由shell脚本中的不带引号的变量引起的,我不会感到惊讶。但是为什么要使用shell脚本来实现一些可以用Python轻松完成的事情呢?!这个问题的代码似乎太多了。如果你能精简到一个最小的例子,我将撤回我的投票。@ChrisMartin,我已经编辑了我的代码,保留了最小的代码。你现在能帮忙吗?@Biffen,你在shell脚本中说无引号的变量是什么意思?我想将一个文件复制到另一台服务器,因此我想使用scp。在上面的代码中,它只是一个bash脚本示例。我不知道如何用Python将文件复制到另一台服务器。@MayankPorwalfilepath=$1
应该是filepath=“$1”
,等等。这是检查这些东西的一个很好的工具。我在os.system(cmd)之前插入了一个print(cmd),它就工作了。ThanksI在os.system(cmd)之前插入了一个print(cmd),它工作了。谢谢