我有python
脚本,如下所示。在此脚本中,我将收集脚本中的stdout
和stderr
文件并存储在Linux
中。
在这个脚本中,我在path_finder
的循环中运行函数input_file
在此脚本中,我使用subprocess
将Linux
中的数据移至其他位置。
我想在完成subprocess
之后运行loop
调用,而是在loop
第一次运行时以及第二次运行loop
时运行运行它会引发预期的错误。当文件存在时,它会抛出错误。
#!/usr/bin/python
import os
import sys
import traceback
import subprocess
def path_finder(
table,
mysql_user,
user,
dir,
):
day = datetime.now().strftime('%Y-%m-%d')
month = datetime.now().strftime('%Y-%m')
Linux_path = '/data/logging/{}'.format(input_file)
New_path = '/user/{}/{}/logging/{}/{}/{}'.format(user,dir,mysql_user,month,day)
subprocess.call(["rm", Linux_path])
so = se = open('/data/logging/{}'.format(input_file), 'a',
0)
#re-open stdout without buffering
sys.stdout = os.fdopen(sys.stdout.fileno(), 'a', 0)
# redirect stdout and stderr to the log file opened above
os.dup2(so.fileno(), sys.stdout.fileno())
os.dup2(se.fileno(), sys.stderr.fileno())
### CODE:
Do something
### if errors the print traceback
### repeat the same for every table in input file
## Execute below statement after for loop completed
subprocess.call(["cp", Linux_path, New_path])
if len(sys.argv) != 5:
print 'Invalid number of args......'
exit()
input_file = sys.argv[1]
mysql_user = sys.argv[2]
user = sys.argv[3]
dir = sys.argv[4]
input = open("{}.format(input_file)", "r")
for table in input:
path_finder(
table,
mysql_user,
user,
dir,
)
sc.stop()
print
如何更改我的脚本,以便在sub process
完成后运行for loop
来电?
答案 0 :(得分:1)
我不知道问题所在。您最后要执行的语句当前存在于函数' path_finder'这就是每次都在运行的原因。 要使此运行只运行一次,并且在for循环结束后,将语句放在它之后。
for table in input:
path_finder(
table,
mysql_user,
user,
dir,
)
subprocess.call(["cp", Linux_path, New_path])
这应该这样做。