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

时间:2019-10-09 09:24:49

标签: python awk

下面的一段代码是一个较大程序的一部分,该程序通过第一行.CookedValue的批处理脚本在远程服务器上运行。

在我的本地计算机上,它可以正常运行,但是在远程服务器上会出现权限问题。怎么了?

对代码的描述可能对该问题并不重要,但是基本上,代码基于文件名使用awk处理文件内容。

为什么awk被拒绝对文件进行操作的权限?当我直接在远程服务器的shell提示符下运行awk时,它可以正常工作。

(Get-counter -Counter "\TCPv4\Connections Established").countersamples | Select-Object -ExpandProperty CookedValue

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

我非常确定这是一个权限问题,因为当您登陆到远程机器时,它没有登陆到存在您的Input_file的目录上,当然,它将登陆到远程服务器上登录用户的HOME目录中。因此,最好的做法是提及具有完整路径的文件名(确保具有目标路径的文件名也存在于目标位置中,否则您可以在其上写一个包装器以检查文件是否存在)。您能不能试一下。

#!/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$$