【问题标题】:Permission Denied Error with subprocess.call()subprocess.call()的权限被拒绝错误
【发布时间】:2018-02-09 05:44:24
【问题描述】:

我正在尝试将一些 nrrd 文件转换为 Dicom 文件,并且我有此代码 sn-p

NRRD_TO_DICOM = '/mnt/sdc1/user/6363/'
def NRRDToDICOM(filename, output_folder_name):
    subprocess.call([NRRD_TO_DICOM, filename, output_folder_name])

NRRDToDICOM('ARTERIAL.nrrd', '/mnt/sdc1/user/6363/ARTERIAL/')

我尝试从我的 jupyter notebook 运行它,但它给了我

 PermissionError                           

Traceback (most recent call last)
<ipython-input-6-5ee279d7c7db> in <module>()
      3     subprocess.call([NRRD_TO_DICOM, filename, output_folder_name])
      4 
----> 5 NRRDToDICOM('ARTERIAL.nrrd', '/mnt/sdc1/Ryan/6363/ARTERIAL/')

<ipython-input-6-5ee279d7c7db> in NRRDToDICOM(filename, output_folder_name)
      1 NRRD_TO_DICOM = '/mnt/sdc1/Ryan/6363/'
      2 def NRRDToDICOM(filename, output_folder_name):
----> 3     subprocess.call([NRRD_TO_DICOM, filename, output_folder_name])
      4 
      5 NRRDToDICOM('ARTERIAL.nrrd', '/mnt/sdc1/Ryan/6363/ARTERIAL/')

PermissionError: [Errno 13] Permission denied

之后我将保存的文件保存为py 文件并在完成后从终端运行它

chmod +x /mnt/sdc1/user/6363/ARTERIAL/

chmod +x /mnt/sdc1/user/6363/

但同样的错误仍然存​​在, 任何有关我如何解决此问题的建议都会非常有帮助,在此先感谢。

【问题讨论】:

  • 尝试在不进行任何异常处理的情况下将其减少为minimal reproducible example,以便您可以准确地看到正在发生的事情并获得回溯。我们能看到的甚至比你能看到的还要少。
  • 好吧,等一下

标签: python jupyter-notebook


【解决方案1】:

您正试图将/mnt/sdc1/user/6363/ 作为命令的名称运行,但显然它不是一个。

目前尚不清楚您要实际运行什么,但这根本不是正确的方法。

您作为第一个参数传递给subprocess.Popen() 的列表中的第一项及其各种便利包装器需要是可执行文件,就像您需要键入命令而不是目录一样名称,在 shell 提示符下。

我猜你的代码应该是这样的

def NRRDToDICOM(filename, output_folder_name):
    subprocess.call(['/usr/bin/nrrdtodicom', filename, output_folder_name])

如果可执行文件的路径已经在您的PATH 上,则可能不需要它(因为它可能应该是——我主要放在/usr/bin/ 中以明确表明我们正在谈论这种类型的事情),如果你绝对坚持,你当然可以将它保存在一个变量中,但这似乎是一件奇怪的事情(尽管如果可以以许多不同的名称安装具有所需 API 的命令,那么也许它使其可配置或至少易于更改是有意义的)。

【讨论】:

  • 哦,好的,我传递一个目录,这就是我出错的地方
【解决方案2】:

使用-R 递归每一级目录:

chmod +x -R /mnt/sdc1/user/6363/ARTERIAL/

【讨论】:

  • 让我检查一下
  • 我仍然遇到同样的错误,我在这里做错了吗@aircraft
  • 您给定的命令仅适用于目录,您会看到我编辑的答案。
  • 嗯?不,-R 已经让它遍历整个树;您添加的通配符只会使它(一点点)变慢,并使它错过任何以点开头的目录条目。
  • 当我尝试建议的编辑时,我收到以下错误'chmod: cannot access '/mnt/sdc1/Ryan/6363/ARTERIAL/*': No such file or directory
猜你喜欢
  • 1970-01-01
  • 2018-07-19
  • 1970-01-01
  • 2016-09-25
  • 2015-09-16
  • 2012-02-11
  • 2016-11-14
  • 2016-12-28
  • 2016-10-18
相关资源
最近更新 更多