小编Kat*_*tie的帖子

如何使用call/Popen继承环境变量来调用子进程

首先,对我所确定的显而易见的道歉是我对bash,shell和子进程的基本理解.

我正在尝试使用Python来自动调用一个名为Freesurfer的程序(实际上,我正在调用的子程序称为recon-all.)

如果我直接在命令行执行此操作,我将"源"一个名为mySetUpFreeSurfer.sh的脚本,除了设置三个环境变量之外什么都不做,然后"源"另一个脚本FreeSurferEnv.sh.FreesurferEnv.sh在我看来并没有做任何事情,只是设置了很多环境变量并向终端回应了一些东西,但它比其他bash脚本更复杂,所以我不确定.

这就是我现在所拥有的:

from subprocess import Popen, PIPE, call, check_output
import os

root = "/media/foo/"

#I got this function from another Stack Overflow question.

def source(script, update=1):
    pipe = Popen(". %s; env" % script, stdout=PIPE, shell=True)
    data = pipe.communicate()[0]
    env = dict((line.split("=", 1) for line in data.splitlines()))
    if update:
        os.environ.update(env)
    return env

source('~/scripts/mySetUpFreeSurfer.sh')
source('/usr/local/freesurfer/FreeSurferEnv.sh')

for sub_dir in os.listdir(root):
    sub = "s" + sub_dir[0:4]
    anat_dir = os.path.join(root, sub_dir, "anatomical")
    for directory in os.listdir(anat_dir):
        time_dir = os.path.join(anat_dir, directory)
        for d in …
Run Code Online (Sandbox Code Playgroud)

python bash shell subprocess environment-variables

12
推荐指数
2
解决办法
1万
查看次数

如何清除 Flask 中现有的 Flash 消息

我在 Flask 中有一条警告闪现消息,该消息在用户尝试根据有关用户的背景信息提交表单之前出现。如果用户继续按照警告不要提交表单,他们就会被阻止并看到第二条闪现消息。我想在用户看到第二条消息之前清除第一条消息。

我已经阅读了关于 flash 消息的 Flask 文档,并尝试通过 google 搜索答案。我还阅读了一些Flask 源代码。我没有想到任何解决方案。

谁能帮我弄清楚如何清除闪烁消息?

python flask flash-message

10
推荐指数
2
解决办法
9717
查看次数

无法使用 docker-compose.override 覆盖卷挂载

我正在尝试在 Mac 上启动 Web 应用程序的本地版本,我需要告诉 docker-compose 不要尝试安装某些卷。我正在使用一个docker-compose.override.yml文件,但我所做的显然没有覆盖任何内容。

这是我的相关部分docker-compose.yml

version: '3'

services:
  web:
    volumes:
      - user-data:/usr/src/app/flask_brain_db/static/images/data
      - /etc/letsencrypt:/etc/letsencrypt

  nginx:
    volumes:
      - ./web/flask_brain_db/static:/usr/src/app/flask_brain_db/static
      - user-data:/usr/src/app/flask_brain_db/static/images/data
      - /etc/letsencrypt:/etc/letsencrypt
Run Code Online (Sandbox Code Playgroud)

这是我的相关部分docker-compose.override.yml

 web:
    volumes:
      - user-data:/usr/src/app/flask_brain_db/static/images/data

  nginx:
    volumes:
      - ./web/flask_brain_db/static:/usr/src/app/flask_brain_db/static
      - user-data:/usr/src/app/flask_brain_db/static/images/data
Run Code Online (Sandbox Code Playgroud)

当我运行时,docker-compose up我仍然收到与尝试安装 LetsEncrypt 驱动器相关的错误。如果我真的去实际注释掉这些行,docker-compose.yml我就不会再得到这个错误了。

我这样做错了吗?

docker docker-compose

5
推荐指数
0
解决办法
2756
查看次数

Flask WTForms:为什么我上传文件的POST请求没有发送文件数据?

我正在尝试制作一个上传文件的表单,但是文件数据未随请求发送。我正在手动导航到我的文件并点击提交。我的FileRequired验证程序失败。(如果我不包括在内,则该data字段form.scan_file为空。)

这是我的表格:

from flask_wtf import FlaskForm
from flask_wtf.file import FileField, FileAllowed, FileRequired

class ScanForm(FlaskForm):
    scan_file = FileField(validators=[FileAllowed(['nii', 'nii.gz', 'zip']), FileRequired()])
Run Code Online (Sandbox Code Playgroud)

这是我的views.py

from flask import Blueprint, render_template, request, flash, redirect, url_for, session
from .models import Scan
from .forms import ScanForm
from .service import ScanService
from cookiecutter_mbam.utils import flash_errors

blueprint = Blueprint('scan', __name__, url_prefix='/scans', static_folder='../static')

@blueprint.route('/add', methods=['GET', 'POST'])
def add():
    """Add a scan."""
    form = ScanForm(request.form)
    if form.validate_on_submit():
        f = form.scan_file.data
        service = ScanService()
        xnat_uri = …
Run Code Online (Sandbox Code Playgroud)

flask wtforms flask-wtforms

5
推荐指数
1
解决办法
820
查看次数

如何在 MacOS 上通过 TCP 连接到 Docker

当涉及到更广泛的网络问题时,尤其是 Docker,我是一个新手,我确信这一点在这个问题中会变得显而易见。

现在,我想要完成的相对简单的事情是在 Mac 上的 Docker 上启用 tcp 套接字(更进一步,了解从客户端计算机到哪里 ping 我的 Docker 主机)。我有点作弊,因为我没有描述我的最终目标,我知道这会导致 XY 问题,但我现在真正的目标是更好地理解 Docker 和网络,如果我能做到当我启用 tcp 套接字时,我会学到一些东西。

以下是障碍: 是有关为 docker 守护进程启用 tcp 套接字的主要文档。但显然这个 dockerd 二进制文件在 Docker for Mac 上 不存在。

那么我如何完成类似的任务呢? 这个答案提出了一种可能性,但我遇到的一个问题是我不明白我的 docker 主机在该选项中的 IP 地址(这可能是因为我对网络问题感到困惑)。

另外,如果您单击鲸鱼,则会出现一个采用 JSON 对象的守护程序选项卡。也许我可以把我想监听的端口和IP地址放在那里?但使用什么语法呢?钥匙的名称是什么?这是在哪里记录的?如果答案在这里我不明白。

感谢您提供的任何帮助!

macos tcp docker docker-for-mac

3
推荐指数
1
解决办法
3524
查看次数

如果您已经分叉了一个 repo 并且您是该分叉的唯一用户,那么在推送后可以重新设置基准吗?

我已经阅读了其他 SO答案,这些答案是关于推送后重新设置基准有多么危险以及不知道自己在做什么的人(即我)不应该使用--force.

我有一个分叉的 repo,我是这个分叉的唯一用户。我想对我分叉的回购进行 PR。我已经推送到我的 fork,但我想在我做之前清理我的提交历史,无论是通过 rebase 还是其他一些方法。这会导致某种我不明白的问题吗?

git github

2
推荐指数
1
解决办法
48
查看次数

“使用 mex 时出错,未检测到支持的编译器”:无法为 MATLAB 安装 CUDA 兼容的 C++ 编译器

我有 Matlab 2022b,Windows 11。在 Matlabmex -setup cpp

MEX configured to use 'Microsoft Visual C++ 2022' for C++ language compilation
Run Code Online (Sandbox Code Playgroud)

在命令提示符处,nvcc --version产生:

   nvcc: NVIDIA (R) Cuda compiler driver
    Copyright (c) 2005-2022 NVIDIA Corporation
    Built on Mon_Oct_24_19:40:05_Pacific_Daylight_Time_2022
    Cuda compilation tools, release 12.0, V12.0.76
    Build cuda_12.0.r12.0/compiler.31968024_0
Run Code Online (Sandbox Code Playgroud)

当我尝试运行此文件时,出现此错误:

 Error using mex
    Supported compiler not detected. For options, visit https://www.mathworks.com/support/compilers.
    
    Error in mexcuda (line 168)
        [varargout{1:nargout}] = mex(mexArguments{:});
    
    Error in mexGPUall (line 7)
        mexcuda -largeArrayDims spikedetector3.cu
Run Code Online (Sandbox Code Playgroud)

在 Matlab 中选择“MinGW64 …

c++ matlab cuda

2
推荐指数
1
解决办法
728
查看次数