From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Leo Butler Newsgroups: gmane.lisp.guile.user Subject: Re: Shell commands with output to string Date: Tue, 22 Feb 2022 10:00:00 -0600 Message-ID: <87y222lwn3.fsf@t14.reltub.ca> References: <87o82z5636.fsf@laura> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="11456"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) To: Olivier Dion via General Guile related discussions Original-X-From: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Tue Feb 22 17:29:30 2022 Return-path: Envelope-to: guile-user@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nMY2c-0002n8-DO for guile-user@m.gmane-mx.org; Tue, 22 Feb 2022 17:29:30 +0100 Original-Received: from localhost ([::1]:60414 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nMY2Z-000135-T7 for guile-user@m.gmane-mx.org; Tue, 22 Feb 2022 11:29:28 -0500 Original-Received: from eggs.gnu.org ([209.51.188.92]:41680) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nMXtK-0004ki-Hr for guile-user@gnu.org; Tue, 22 Feb 2022 11:19:54 -0500 Original-Received: from mail-eopbgr670114.outbound.protection.outlook.com ([40.107.67.114]:25671 helo=CAN01-TO1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nMXt0-0005pV-LR for guile-user@gnu.org; Tue, 22 Feb 2022 11:19:49 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CEoBiSblTw2TNd6BBjrul7mLqXPzWn31+qNXavA7JFn9AGYNFW/NsZgtwBphBl+nrUu+gAHjHnPk/1Tjd1f+GO2ASXs/sBptkKlFhQcjPvaRHrot9RR8egkGL0bNDVItr/wzJJRUCtvJyk7HS1EJbF2awQi+6Qb7LXihTz+UaLeERHI91U4tgcTZpQb6Dzk87eVRWlDxRn7qNfLCp6fM3nz9liX2C01i79uRfqA25ROIo3USwCACZf3S/+GhzS3GGehW7M9Da/WCGzK+3RkmBF4vqIHiSXma2Fa/+aeQuH/xTlPVBAiMrHTWm98ZSZhq7DeDvIVrQeUNZwP6K1fEtw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=l+Tl3S0NQvYBWKjczKHGVxWqCai2jkeXwnAZlykMMrw=; b=SBJUitYdGiS6s/2AuDv7Ar6O45DDaDuGtVWnJDZ0nzzO87PLmkKFUGYkjaSyKyT4PkiX4kKQWt4Z2uD8AoTjSdMHfdQhu0z52+mwRXjD9chxMGDNJc1d4gBl4quiD2sIfgLENtw9Hja84BWlpQ1c/6bE/9ffyTXNAhz9R6Fn5TiUZXgZKVoD0AD2seYM+hROWPgA9jc1Jkg5FmEUTZnKdAnypHZAfgIp7iDx5s3nrj9ZXZJCS2i+qQLW7MzSZmMIEQ7dV6TROXxgYvtrncm64Nn0I5DvvnMP48Tv/nNVxFtWBDJKqLxn6Z1MPtsOynnUEPLN9iuM8dLpD8dmutSQqg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=umanitoba.ca; dmarc=pass action=none header.from=umanitoba.ca; dkim=pass header.d=umanitoba.ca; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=umanitoba.onmicrosoft.com; s=selector2-umanitoba-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=l+Tl3S0NQvYBWKjczKHGVxWqCai2jkeXwnAZlykMMrw=; b=UAWld620G2JUorqpYVLH8VhV9cyD6nIzgnesGU2bgYE4O7MsXiid6MwEZPAcceIxaXMYetpXe7W3a6UBiSipvF2LvIWhM6bLHsjZkI1cLismqSI4RGINPP/4SAawJNVK0WXYwPgVr4xunfGaop8KnmNeZdajkVWCpi97FlPtejQ= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=umanitoba.ca; Original-Received: from YT3PR01MB5590.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b01:60::14) by YTXPR0101MB1952.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b00:f::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4995.17; Tue, 22 Feb 2022 16:00:04 +0000 Original-Received: from YT3PR01MB5590.CANPRD01.PROD.OUTLOOK.COM ([fe80::e009:a8a0:9acf:52a7]) by YT3PR01MB5590.CANPRD01.PROD.OUTLOOK.COM ([fe80::e009:a8a0:9acf:52a7%4]) with mapi id 15.20.4995.027; Tue, 22 Feb 2022 16:00:04 +0000 In-Reply-To: <87o82z5636.fsf@laura> (Olivier Dion via General Guile related discussions's message of "Tue, 22 Feb 2022 09:27:57 -0500") X-ClientProxiedBy: MWHPR03CA0021.namprd03.prod.outlook.com (2603:10b6:300:117::31) To YT3PR01MB5590.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b01:60::14) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e17bd404-ebb4-4ac2-b386-08d9f61c6383 X-MS-TrafficTypeDiagnostic: YTXPR0101MB1952:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: pjppkKHz6478AdR1ZxUCRI7bMum75pP/2eq9MQlph2BKaAJpu/3Gsu0LGsE/o0xAl0Uuc6VMwhu/jDOOtz53EWPBP2byAv51upfjZeo3YGA+0KzuYqhfpCuV5rG9iUWiZB0QEyANRnDqRsNmlxsFNPAVv390lX+nZuP19krPs9nIl4M5PIPpEl6GZEfLTGHHTTbwnb2d/L+QTHNvTa1qFeoj0sD8NjIDv/DbiG9BERBlZwTE4qo0iR3pFH9JkBq8a7KnB6lGMV8dl6tEq8BAxGHym/DgnM0gtNh2oehlAv8AaY+yE3g93BG7NIqP7pTW4WyBrspL8G7UijkF2VoMA01YoG0V+Le0XXkHyxST/lzFkKnYx4/iLjizEZcdr2dJ9pa9e3/AKQHSKy9NXNFT1xxaGEuey2dS6vP7XDvECwSQz4N5JC7FiNmw8O2YU6tO5cCRV/qLD0Knz0vgU3RPtGug10dHYYIjR3p2Lbp5C0BQfspMLY0/Y9bPjX51KF3lWR6cuXD+zCZSQjTMsziEXXaiqiimxYXE+0taQlWkw8Qp27XVuGP+JmVY/AsHEdH954N7qwDlE8VP+POU4XHvSgxekWHDfoyVVEoA7EvvxEklF0wGBX06Roexfo78XZX0AASchF5obnbfw0P74o12BWvjZSiytK5lCCOUcYQ1XnqLOIlVq3c118ncS2AVAnrO X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:YT3PR01MB5590.CANPRD01.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230001)(366004)(66476007)(6506007)(8936002)(9686003)(2906002)(6512007)(6666004)(44832011)(66556008)(26005)(86362001)(186003)(52116002)(4326008)(8676002)(6486002)(66946007)(38100700002)(38350700002)(5660300002)(508600001)(83380400001)(786003)(316002)(6916009)(54906003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?2wnVhQPMicgA8Kv36mfG8VaX5QRqvE5f6FvPkfahkNW4479vY5jpL8DMTeY2?= =?us-ascii?Q?pkYwFEvjoiLG4BNDXgsG/MYUiPJdM5hM2TXcsjwlQX3I8oVoxziTjaZKmCp7?= =?us-ascii?Q?TS6/hlxoHEEVNa8zOxrVtYxJki7KlH9qX8tj/FfNcZcgYlWkAmKz/+6M8vj0?= =?us-ascii?Q?6QFFU9o2FGKK3fq363toOp3szx8voDG0v5orLuoroyYzifdNACf05QI3rrI+?= =?us-ascii?Q?eWu2wEpY0y6cPCWDOhE6qeEKauXM+t1HxZNT3b5q6n5l3v9GEX8J2C260U7N?= =?us-ascii?Q?/CcdeLMqQ7HxA0IczzB4Wnp2Bay5665IbzFe5++N+MzrVQxU2O7SyisIk9ZH?= =?us-ascii?Q?/guHVaFIaqIBgwxpIc1valxPnFkqpUV9SIGWUUY4g3EHQ/ZxZSQvbO4r9iiU?= =?us-ascii?Q?o/Adjo7TbgK/68KzoIAQPf6IX5t0Du1hD+d1Mdw0Cur7GFWgoIqicOuwbp0/?= =?us-ascii?Q?hBo7ZcbEeKX9eVjQ6Lgwnan3mWrugBbru7Uay99eWkOFX4m7DYzBV/iIyKJN?= =?us-ascii?Q?wTQCCKtGtIqZEOw7IaWpDyDNkJzAcjnM+4cjpL3ZB94o33goxsSAb7miJPAW?= =?us-ascii?Q?jXRl3kDcxVsPxmSBLcYyc9AKun3TUK4MlOkPXqTDkmMLmzorD4LoTz4q7J3M?= =?us-ascii?Q?14 X-OriginatorOrg: umanitoba.ca X-MS-Exchange-CrossTenant-Network-Message-Id: e17bd404-ebb4-4ac2-b386-08d9f61c6383 X-MS-Exchange-CrossTenant-AuthSource: YT3PR01MB5590.CANPRD01.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Feb 2022 16:00:04.0759 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4f80dd0b-338c-4e4c-8a14-90446962f7b8 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: zlMvRriahb4OaRzRU81/YvjSHlBJzTZx8UmBOY/VFSGDHzGutgp8/x7BvhYtcYwkFy3mQumCj0qmdB8GD2CqRg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: YTXPR0101MB1952 Received-SPF: pass client-ip=40.107.67.114; envelope-from=Leo.Butler@umanitoba.ca; helo=CAN01-TO1-obe.outbound.protection.outlook.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Original-Sender: "guile-user" Xref: news.gmane.io gmane.lisp.guile.user:18122 Archived-At: Olivier Dion via General Guile related discussions writes: > On Tue, 22 Feb 2022, Zelphir Kaltstahl wrote: >> Hello Guile users! >> >> How would I run a shell command from inside Guile and get its output >> as a string, instead of the output being outputted directly? (Guile >> 3.0.8) > > I use the following: > > (define-module (shell utils) > #:use-module (ice-9 format) > #:use-module (ice-9 popen) > #:use-module (ice-9 textual-ports)) > > (define (shell% proc fmt . args) > (let* ((port (open-input-pipe (format #f "~?" fmt args))) > (output (proc port))) > (close-pipe port) > output)) You probably want to inspect the exit value of the shell process, so that you can handle/throw the error. This is what I use (similar to your `shell'): (define* (shell-command-to-string cmd) (catch 'shell-command-error ;; thunk (lambda () (let* ((port (open-pipe cmd OPEN_READ)) (str (read-string port)) (wtpd (close-pipe port)) (xval (status:exit-val wtpd))) (if (or (eqv? xval #f) (> xval 0)) (throw 'shell-command-error cmd str)) str)) ;; handler (lambda (key cmd str) (simple-format #t "ERROR: in command ~a\nstring: ~a\n" cmd str) (throw 'error-in-shell-command-to-string cmd str)))) > > (define-public (shell . args) > (apply shell% (cons get-string-all args))) > > (define-public (shell$ . args) > (apply shell% (cons get-line args))) > > Then > (shell "ls" "-l") > > The $ variant is to get a single line in the output. I wonder why there is no module already in ice-9 which does this stuff? It seems like a lot of people are re-inventing the wheel. Leo