René's URL Explorer Experiment


Title: File IO issues · Issue #547 · RustPython/RustPython · GitHub

Open Graph Title: File IO issues · Issue #547 · RustPython/RustPython

X Title: File IO issues · Issue #547 · RustPython/RustPython

Description: There a few differences between the way CPython handles file IO and the way RustPython does. RustPython does not currently offer any close() methods, opened files get leaked and can be closed only by invoking os.close(file.raw.fileno) (o...

Open Graph Description: There a few differences between the way CPython handles file IO and the way RustPython does. RustPython does not currently offer any close() methods, opened files get leaked and can be closed only ...

X Description: There a few differences between the way CPython handles file IO and the way RustPython does. RustPython does not currently offer any close() methods, opened files get leaked and can be closed only ...

Opengraph URL: https://github.com/RustPython/RustPython/issues/547

X: @github

direct link

Domain: github.com


Hey, it has json ld scripts:
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"File IO issues","articleBody":"There a few differences between the way CPython handles file IO and the way RustPython does.\r\n\r\n1. RustPython does not currently offer any `close()` methods, opened files get leaked and can be closed only by invoking `os.close(file.raw.fileno)` (or `os.close(file.buffer.raw.fileno)` for files in text mode) after importing the `os` module.\r\n2. RustPython currently doesn’t offer text writing mode (which is the default for writing in CPython), so in CPython:\r\n   ```python3\r\n   \u003e\u003e\u003e file = open('/tmp/tst', 'w')\r\n   \u003e\u003e\u003e file\r\n   \u003c_io.TextIOWrapper name='/tmp/tst' mode='w' encoding='UTF-8'\u003e\r\n   ```\r\n   one can try to open a file for text writing in RustPython with `wt` mode, but then writing fails:\r\n   ```python3\r\n   \u003e\u003e\u003e\u003e\u003e file = open('/tmp/tst', 'wt')\r\n   \u003e\u003e\u003e\u003e\u003e file.write('\\ntest string')\r\n   Traceback (most recent call last):\r\n     File \u003cstdin\u003e, line 0, in \u003cmodule\u003e\r\n   AttributeError: 'TextIOWrapper' object has no attribute 'write'\r\n   ```\r\n   and files for writing are by default opened in binary mode.\r\n3. RustPython’s `fileno` is a property, while in CPython it is a *method* returning the underlying file descriptor.\r\n4. CPython **doesn’t** rely on the `fileno()` value for file interactions, instead it uses [internal file handle](https://github.com/python/cpython/blob/bcda8f1d42a98d9022736dd52d855be8e220fe15/Modules/_io/fileio.c#L58) while [`fileno()` just returns it as a Python `int`](https://github.com/python/cpython/blob/bcda8f1d42a98d9022736dd52d855be8e220fe15/Modules/_io/fileio.c#L543-L556), so one can modify it, and the file object will still be referring to the original file:\r\n   ```python3\r\n   \u003e\u003e\u003e file = open('/tmp/test', 'wb')\r\n   \u003e\u003e\u003e file.write(b'writing to the original file\\n')\r\n   29\r\n   \u003e\u003e\u003e file.raw.fileno = lambda: 1  # stdout descriptor\r\n   \u003e\u003e\u003e file.write(b'again writing to the original file\\n')\r\n   35\r\n   \u003e\u003e\u003e \r\n   ```\r\n   while in RustPython, changing the `fileno` property changes the underlying file:\r\n   ```python3\r\n   \u003e\u003e\u003e\u003e\u003e file = open('/tmp/test', 'wb')\r\n   \u003e\u003e\u003e\u003e\u003e file.write(b'writing to the original file\\n')\r\n   29\r\n   \u003e\u003e\u003e\u003e\u003e file.raw.fileno = 1  # stdout descriptor\r\n   \u003e\u003e\u003e\u003e\u003e file.write(b'this will appear in the stdout instead\\n')\r\n   this will appear in the stdout instead\r\n   39\r\n   \u003e\u003e\u003e\u003e\u003e \r\n   ```\r\n5. Some file attributes in CPython are protected from modifications, eg.:\r\n   ```python3\r\n   \u003e\u003e\u003e file = open('/tmp/test', 'wb')\r\n   \u003e\u003e\u003e file.raw.mode = 'rb'\r\n   Traceback (most recent call last):\r\n     File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\r\n   AttributeError: attribute 'mode' of '_io.FileIO' objects is not writable\r\n   ```\r\n\r\nAnd then there are some attributes missing (eg. RustPython files do not have a `mode` attribute at all). \r\n\r\nThe first three issues seem easy to fix, but the 4. and 5. need changes in the way RustPython handles objects (they mostly behave like regular Python objects, but need custom payload and properties protected from being overwritten).","author":{"url":"https://github.com/silmeth","@type":"Person","name":"silmeth"},"datePublished":"2019-02-25T20:37:22.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":7},"url":"https://github.com/547/RustPython/issues/547"}

route-pattern/_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format)
route-controllervoltron_issues_fragments
route-actionissue_layout
fetch-noncev2:45778d36-c2d8-0151-d1be-b73db17b128e
current-catalog-service-hash81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114
request-id93C2:6464A:278A928:38ACC43:6A58F7CF
html-safe-nonce8180250955557280d7bcdcf1f48113c35f1bfb56e42e748221067abecd2bc90a
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5M0MyOjY0NjRBOjI3OEE5Mjg6MzhBQ0M0Mzo2QTU4RjdDRiIsInZpc2l0b3JfaWQiOiI0MjkzMTk3OTE3Mjg3MTUxNTY3IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0=
visitor-hmac9d513ce5732552f81c7896bc2a84c83b99bff3d118adcf11ed45001249671ab0
hovercard-subject-tagissue:414295719
github-keyboard-shortcutsrepository,issues,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///voltron/issues_fragments/issue_layout
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/RustPython/RustPython/547/issue_layout
twitter:imagehttps://opengraph.githubassets.com/b62fd6b145eddbccfee518995b5cd3a38b073623c24fca1a95b75a30f129ec38/RustPython/RustPython/issues/547
twitter:cardsummary_large_image
og:imagehttps://opengraph.githubassets.com/b62fd6b145eddbccfee518995b5cd3a38b073623c24fca1a95b75a30f129ec38/RustPython/RustPython/issues/547
og:image:altThere a few differences between the way CPython handles file IO and the way RustPython does. RustPython does not currently offer any close() methods, opened files get leaked and can be closed only ...
og:image:width1200
og:image:height600
og:site_nameGitHub
og:typeobject
og:author:usernamesilmeth
hostnamegithub.com
expected-hostnamegithub.com
None5f2a0c7865178af3d91dd9f13b0cdfc3c73a2529c873d2780bb4c01271a57ec6
turbo-cache-controlno-preview
go-importgithub.com/RustPython/RustPython git https://github.com/RustPython/RustPython.git
octolytics-dimension-user_id39710557
octolytics-dimension-user_loginRustPython
octolytics-dimension-repository_id135201145
octolytics-dimension-repository_nwoRustPython/RustPython
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id135201145
octolytics-dimension-repository_network_root_nwoRustPython/RustPython
turbo-body-classeslogged-out env-production page-responsive
disable-turbofalse
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release8aae7b8d6caacacf5c66eaeb2702d8dc88d85b4a
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/RustPython/RustPython/issues/547#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2FRustPython%2FRustPython%2Fissues%2F547
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub Copilot appDirect agents from issue to mergehttps://github.com/features/ai/github-app
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
View all resourceshttps://github.com/resources
GitHub SponsorsFund open source developershttps://github.com/open-source/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/open-source/accelerator
GitHub Starshttps://stars.github.com
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/enterprise/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2FRustPython%2FRustPython%2Fissues%2F547
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fvoltron%2Fissues_fragments%2Fissue_layout&source=header-repo&source_repo=RustPython%2FRustPython
Reloadhttps://github.com/RustPython/RustPython/issues/547
Reloadhttps://github.com/RustPython/RustPython/issues/547
Reloadhttps://github.com/RustPython/RustPython/issues/547
Please reload this pagehttps://github.com/RustPython/RustPython/issues/547
RustPython https://github.com/RustPython
RustPythonhttps://github.com/RustPython/RustPython
Notifications https://github.com/login?return_to=%2FRustPython%2FRustPython
Fork 1.5k https://github.com/login?return_to=%2FRustPython%2FRustPython
Star 22.2k https://github.com/login?return_to=%2FRustPython%2FRustPython
Code https://github.com/RustPython/RustPython
Issues 287 https://github.com/RustPython/RustPython/issues
Pull requests 100 https://github.com/RustPython/RustPython/pulls
Discussions https://github.com/RustPython/RustPython/discussions
Actions https://github.com/RustPython/RustPython/actions
Projects https://github.com/RustPython/RustPython/projects
Models https://github.com/RustPython/RustPython/models
Wiki https://github.com/RustPython/RustPython/wiki
Security and quality 0 https://github.com/RustPython/RustPython/security
Insights https://github.com/RustPython/RustPython/pulse
Code https://github.com/RustPython/RustPython
Issues https://github.com/RustPython/RustPython/issues
Pull requests https://github.com/RustPython/RustPython/pulls
Discussions https://github.com/RustPython/RustPython/discussions
Actions https://github.com/RustPython/RustPython/actions
Projects https://github.com/RustPython/RustPython/projects
Models https://github.com/RustPython/RustPython/models
Wiki https://github.com/RustPython/RustPython/wiki
Security and quality https://github.com/RustPython/RustPython/security
Insights https://github.com/RustPython/RustPython/pulse
File IO issueshttps://github.com/RustPython/RustPython/issues/547#top
https://github.com/silmeth
silmethhttps://github.com/silmeth
on Feb 25, 2019https://github.com/RustPython/RustPython/issues/547#issue-414295719
internal file handlehttps://github.com/python/cpython/blob/bcda8f1d42a98d9022736dd52d855be8e220fe15/Modules/_io/fileio.c#L58
fileno() just returns it as a Python inthttps://github.com/python/cpython/blob/bcda8f1d42a98d9022736dd52d855be8e220fe15/Modules/_io/fileio.c#L543-L556
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.