python / python/typeshed

Type hint asyncio.Process streams (stdin, stdout, stderr) when created with values other than default None

Ouverte
#13,714 3 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

stubs: false positive
Langage dominant
Python
Étoiles
5.1k
Forks
2.1k
Merge moyen
1 j 19 h
PR mergées (30 j)
82

Description

Is it possible to update asyncio stub files so that asyncio.Process.{stdin,stdout,stderr} are resolved as non-None by mypy?

Example:

from asyncio import create_subprocess_exec
from asyncio.subprocess import PIPE

async def main() -> None:
    proc = await create_subprocess_exec('/usr/bin/ls', stdout=PIPE)
    async for line in proc.stdout:
        print(line)

Typing error reported by mypy (desired behaviour is no error):

error: Item "None" of "StreamReader | None" has no attribute "__aiter__" (not async iterable)  [union-attr]

Current asyncio.Process declaration in typeshed/stdlib/asyncio/subprocess.pyi:

class Process:
    stdin: streams.StreamWriter | None
    stdout: streams.StreamReader | None
    stderr: streams.StreamReader | None

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par la déclaration de Process dans typeshed/stdlib/asyncio/subprocess.pyi et suivez les déclarations de sous-processus asyncio utilisées par create_subprocess_exec. Reproduisez l’erreur mypy de l’exemple de l’issue, puis vérifiez que le fait de passer PIPE rend les attributs de flux concernés non optionnels sans modifier le comportement par défaut de None.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
developer-experience
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
42/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.