小编Mos*_*ted的帖子

对python os.path.abspath的误解

我有以下代码:

directory = r'D:\images'
for file in os.listdir(directory):
    print(os.path.abspath(file))
Run Code Online (Sandbox Code Playgroud)

我想要下一个输出:

  • d:\影像\ img1.jpg
  • D:\ images\img2.jpg等等

但是我得到了不同的结果:

  • d:\代码\ img1.jpg
  • d:\代码\ img2.jpg

其中D:\ code是我当前的工作目录,结果与此相同

os.path.normpath(os.path.join(os.getcwd(), file))
Run Code Online (Sandbox Code Playgroud)

所以,问题是:我必须使用os.path.abspath的目的是什么

os.path.normpath(os.path.join(directory, file))
Run Code Online (Sandbox Code Playgroud)

获取我的文件的真正绝对路径?尽可能显示真实的用例.

python path os.path

23
推荐指数
2
解决办法
4万
查看次数

AWS Secrets Manager 找不到指定的密钥

我正在使用 AWS Fargate 并使用 Secrets Manager 存储敏感数据。任务定义应该从秘密存储中获取环境变量

- name: "app"
  image: "ecr-image:tag"
  essential: true
  secrets:
    - name: "VAR1"
      valueFrom: "arn:aws:secretsmanager:us-east-1:111222333444:secret:var-one-secret"
    - name: "VAR2"
      valueFrom: "arn:aws:secretsmanager:us-east-1:111222333444:secret:var-two-secret"
    - name: "VAR3"
      valueFrom: "arn:aws:secretsmanager:us-east-1:111222333444:secret:var-two-private"
Run Code Online (Sandbox Code Playgroud)

但由于某种原因它失败并出现以下错误

ResourceNotFoundException: Secrets Manager can’t find the specified secret. status code: 400, request id
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎有点奇怪,因为

  • 此外,IAM 具有获取秘密值的权限

  • 当只留下VAR1变量时,一切都按预期工作

  • AWS CLI 能够毫无问题地检索每个密钥

例如

aws secretsmanager get-secret-value --secret-id var-two-secret
Run Code Online (Sandbox Code Playgroud)

我的配置可能有什么问题?任何提示表示赞赏

amazon-web-services amazon-ecs aws-fargate aws-secrets-manager

13
推荐指数
3
解决办法
2万
查看次数

Yii密码重复字段

在创建和更新用户时,我想在基于Yii的Web应用程序中使用密码重复字段.创建时我想要两个字段都需要,当更新时,用户可以将这些字段留空(密码将是相同的)或输入新密码并确认.我怎么能点到它?

passwords confirmation yii

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

将 tqdm 与多重处理结合使用以实现多个进度条

我想监控不同进程的多个工作人员的进度。对于每个子进程,我都有自己的进度条,但它不能与ProcessPoolExecutor执行程序正常工作。

def main():
    with futures.ProcessPoolExecutor(max_workers=PROCESSES) as executor:
        fut_to_num = {}
        for i in range(PROCESSES):
            fut = executor.submit(execute_many_threads, i)
            fut_to_num[fut] = i

        for future in futures.as_completed(fut_to_num):
            r = future.result()
            # print('{} returned {}'.format(fut_to_num[future], r))
    print('\nDone!\n')


def execute_many_threads(n_pool=0):
    with futures.ThreadPoolExecutor(max_workers=THREADS) as executor:
        for i in range(THREADS):
            executor.submit(execute_thread, n_pool, i)
    return n_pool+1


def execute_thread(n_pool=0, n_thread=0):
    s = random.randint(1, 5)
    thread_num = n_pool*(PROCESSES-1) + n_thread

    progress = tqdm.tqdm(
        desc='#{:02d}'.format(thread_num),
        position=thread_num,
        total=10*s,
        leave=False,
    )
    # print('Executing {}: {}...'.format(thread_num, s))
    for i in range(s): …
Run Code Online (Sandbox Code Playgroud)

python concurrent.futures python-multiprocessing tqdm process-pool

7
推荐指数
0
解决办法
6045
查看次数

协程进程的异步打印状态

我有一堆协程在做一些工作

@asyncio.coroutine
def do_work():
    global COUNTER
    result = ...
    if result.status == 'OK':
        COUNTER += 1
Run Code Online (Sandbox Code Playgroud)

和另一个

COUNTER = 0
@asyncio.coroutine
def display_status():
    while True:
        print(COUNTER)
        yield from asyncio.sleep(1)
Run Code Online (Sandbox Code Playgroud)

其中必须显示有多少协程完成了它们的工作。如何正确执行此任务?以下解决方案不起作用

@asyncio.coroutine
def spawn_jobs():
    coros = []
    for i in range(10):
        coros.append(asyncio.Task(do_work()))
    yield from asyncio.gather(*coros)

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.create_task(display_status())
    loop.run_until_complete(spawn_jobs())
    loop.close()
Run Code Online (Sandbox Code Playgroud)

我希望无论 do_work() 协程做什么,计数器都会每秒打印到控制台。但我只有两个输出:0 和几秒钟后重复 10。

python asynchronous coroutine python-3.x

6
推荐指数
1
解决办法
5749
查看次数

运行需要环境变量的单元测试

没有环境变量,我们知道,调用是: python -munittesttests.unit_test_1

但我需要传递环境变量,因为我需要将一些值插入到我拥有信用的数据库中。我不想将其写入 config/.py 文件中,只想将它们作为环境变量传递。因此,如果我将环境变量传递为:

python -m unittest tests.unit_test_1 $username $password
Run Code Online (Sandbox Code Playgroud)

编辑:

unit_test_1.py 大致如下:

import unittest
from sys import argv
from os import environ

class database_helper_tests(unittest.TestCase):
    def fetch(this):
        x = connet_to_database(environ["username"], environ["password"])
        data = x.fetch_from_database(this)
        expected_output = ...
        self.assertEqual(expected_output, data)

if __name__ == "__main__":
    os["username"] = argv[1]
    os["password"] = argv[2]
    unittest.main()
Run Code Online (Sandbox Code Playgroud)

第一个测试通过。然后我得到的错误是:

ModuleNotFoundError: No module named 'username"
ModuleNotFoundError: No module named 'password"
Run Code Online (Sandbox Code Playgroud)

最后我看到了这一点(尽管我只运行了一个测试):

Ran 3 tests in 1.48s
Run Code Online (Sandbox Code Playgroud)

我应该怎么做才能只运行所需的测试?

先感谢您。

python unit-testing environment-variables

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

带 Gunicorn 的瓶子

像这样运行瓶子脚本有什么区别

from bottle import route, run

@route('/')
def index():
    return 'Hello!'

run(server='gunicorn', host='0.0.0.0', port=8080)
Run Code Online (Sandbox Code Playgroud)

使用命令python app.py和这个

from bottle import route, default_app

@route('/')
def index():
    return 'Hello!'

app = default_app()
Run Code Online (Sandbox Code Playgroud)

使用命令gunicorn app:app --bind='0.0.0.0:8080'

python wsgi bottle gunicorn

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

从Gunicorn工人本身获取工人ID

我在workers=4设置环境中经营多名古尼康工人。因此,据我了解,我有5个不同的流程:一个gunicorn主流程和4个其他工作流程。我可以获取有关当前正在处理请求的工人的信息吗?所以我可以从worker内部获取任何worker id 吗,就像每个请求都返回一个包含内容的响应:该请求由worker:worker_id服务吗?

python webserver worker gunicorn

5
推荐指数
2
解决办法
2600
查看次数

Gunicorn 不重新加载工人

当其中一名工人无法启动时,我可以告诉 Gunicorn 失败吗?我不希望 Gunicorn 自动为我处理和重新加载工作程序,但我希望它失败,而不是一次又一次地尝试启动工作程序。我应该向主进程或某些信号提出任何特定的异常吗?或者我可以在启动主进程时提供命令行参数?我想在工作人员中实现像这样的逻辑:

if cond():
    sys.exit(1)
Run Code Online (Sandbox Code Playgroud)

然后所有的gunicorn都停下来而不重新启动这个工人

python wsgi web-worker gunicorn web

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

为点击解析器选择目标变量

我想知道如何覆盖click.option( Click lib ) 的目标变量。例如在这样一段代码中

import click

@click.command()
@click.option('--output', default='data')
def generate_data(output_folder):
    print(output_folder)
Run Code Online (Sandbox Code Playgroud)

所以我想使用--output标志但将其值传递给output_folder参数,有点像这样:@click.option('--output', default='data', dest='output_folder')?点击有这种能力吗?我知道 argparse 允许这种行为。

python command-line command-line-interface command-line-arguments python-click

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

Bash将字符串参数传递给python脚本

我有一个bash脚本,它从环境中读取变量,然后将其传递给python脚本,如下所示

#!/usr/bin/env bash

if [ -n "${my_param}" ]
then
    my_param_str="--my_param ${my_param}"
fi

python -u my_script.py ${my_param_str}
Run Code Online (Sandbox Code Playgroud)

对应的python脚本如下所示

parser = argparse.ArgumentParser(description='My script')
parser.add_argument('--my_param',
                    type=str,
                    default='')

parsed_args = parser.parse_args()
print(parsed_args.description)
Run Code Online (Sandbox Code Playgroud)

我想提供带有破折号字符“ Some-string”的字符串作为参数,但是它不能通过bash脚本工作,但是直接通过命令行调用是可以的。

export my_param="Some -- string"
./launch_my_script.sh
Run Code Online (Sandbox Code Playgroud)

给出一个错误,unrecognized arguments: -- string并且 python my_script.py --my_param "Some -- string"运行良好。我尝试过使用nargsmy_param_str="--my_param '${my_param}'"以此方式进行转义,但两种解决方案均无效。这种情况下有任何解决方法吗?还是不同的方式该如何处理?

python bash escaping command-line-arguments argparse

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

Bundler如何卸载冲突的依赖项

我正在尝试vagrant plugin install vagrant-vbguest在Mac 上执行

ProductName:    Mac OS X
ProductVersion: 10.12.6
BuildVersion:   16G29
Run Code Online (Sandbox Code Playgroud)

但是之后我有一条错误消息

Vagrant用于安装插件的基础系统Bundler报告了一个错误。错误如下所示。这些错误通常是由错误配置的插件安装或瞬时网络问题引起的。来自Bundler的错误是:

冲突的依赖项winrm-fs(= 1.0.1)和winrm-fs(= 0.2.3)
激活的winrm-fs-0.2.3与冲突的依赖项(= 1.0.1)不匹配

冲突的依赖链:winrm-fs(= 0.2.3),已激活0.2.3

对比:winrm-fs(= 1.0.1)

匹配winrm-fs(= 1.0.1)的宝石:winrm-fs-1.0.1

因此,问题是如何使用Bundler解决该问题,即如何以安全的方式安装我的guest虚拟机插件?其他详情

vboxmanage --version                                                                                   
5.1.26r117224
Vagrant 1.9.7
Run Code Online (Sandbox Code Playgroud)

ruby macos virtualbox bundler vagrant

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

vue 提交带有更新输入值的表单

我有一个简单的隐藏表格

<template>
  <form ref="form" method="POST" action="https://target.com/post" accept-charset="utf-8">
    <input type="hidden" name="data" :value="myData"/>
    <input type="hidden" name="signature" v-model="mySignature" />
    <input ref="submit" type="submit">
  </form>
</template>
Run Code Online (Sandbox Code Playgroud)

并且我希望附加到不同按钮 ( v-on:click="submitForm") 的方法提交此表单设置数据。

export default {
  name: 'MyComponent',
  methods: {
    submitForm() {
      // should update values for inputs
      this.myData = 'dynamically calculated';
      this.mySignature = 'creates signature from data';
      // submit the form with values above
      this.$refs.form.submit();
    },
  },
  data() {
    return {
      myData: null,
      mySignature: null,
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但似乎我误解了反应性/绑定/参考?在 Vue 中,所以我试过了

  • this.$refs.submit.click();
  • this.$forceUpdate();
  • 设置 …

vue.js vue-component vue-reactivity vue-render-function vuejs3

0
推荐指数
1
解决办法
376
查看次数