awk:致命:无法打开文件“file”进行读取(权限被拒绝)

2024-04-19 16:01:47 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的一段代码是一个较大程序的一部分,我正在远程服务器上通过一个批处理脚本运行该程序,第一行是#!/bin/bash -l。你知道吗

在我的本地机器上,它正常运行,但在远程服务器上出现权限问题。怎么了?你知道吗

代码的描述对问题可能并不重要,但基本上代码使用awk根据文件名处理文件的内容。你知道吗

为什么awk拒绝对这些文件进行操作?当我在远程服务器的shell提示符下直接运行awk时,它工作正常。你知道吗

#!/usr/bin/env python

list_of_files = ["file1", "file2", "file3"]

for file in list_of_files:
       awk_cmd = '''awk '/^>/{print ">" substr(FILENAME,1,length(FILENAME)) ++i; next} 1' ''' + file +  " > tmp && mv tmp " + file + \
                 " | cat files > 'pooled_file' "
       exitcode = subprocess.call(awk_cmd, shell=True)

任何帮助都将不胜感激。你知道吗


Tags: 文件of代码程序服务器cmdbin远程
1条回答
网友
1楼 · 发布于 2024-04-19 16:01:47

我很确定这是一个权限问题,因为当你登陆到远程机器时,它不会登陆到你的输入文件所在的目录,当然它会登陆到远程服务器上登录用户的主目录。因此,使用完整路径提及文件名是一种很好的做法(请确保目标位置中也存在具有给定路径的文件名,否则您可以在其上编写一个包装器来检查文件是否存在)。你能试试下面的吗。你知道吗

#!/usr/bin/env python

list_of_files = ["/full/path/file1", "/full/path/file2", "/full/path/file3"]

for file in list_of_files:
       awk_cmd = '''awk '/^>/{num=split(FILENAME,array,"/");print ">" substr(array[num],1,length(array[num])) ++i; next} 1' ''' + file +  " > tmp$$ && mv tmp$$ " + file + \
                 " | cat files > 'pooled_file' "
       exitcode = subprocess.call(awk_cmd, shell=True)

我没有测试它,但是我已经按照完整路径更改了它,因为awk将打印带有文件名的完整路径,所以我已经将代码中的FILENAME更改为按照数组的位置,为了安全起见,我还将tmp临时文件更改为tmp$$。你知道吗

相关问题 更多 >